Когда вы вызываете GetAllAnimals
, он фактически не выполняет какой-либо код, пока вы не перечислите возвращаемый IEnumerable в цикле foreach.
DataContext удаляется, как только метод оболочки возвращается, перед вами перечислите IEnumerable.
Простейшим решением было бы сделать метод-оболочку итератором, как это:
public static IEnumerable<Animal> GetAllAnimals() {
using (AnimalDataContext dataContext = new AnimalDataContext()) {
foreach (var animalName in dataContext.GetAllAnimals()) {
yield return GetAnimal(animalName);
}
}
}
Таким образом, оператор using будет скомпилирован в внешний итератор, и он будет удален только при размещении внешнего итератора.
Другим решением было бы перечислить IEnumerable в обертке. Самый простой способ сделать это - вернуть List<Animal>
, например:
public static IEnumerable<Animal> GetAllAnimals() {
using (AnimalDataContext dataContext = new AnimalDataContext()) {
return new List<Animal>(dataContext.GetAllAnimals());
}
}
Обратите внимание, что это теряет преимущество отсроченного исполнения, поэтому оно получит всех животных, даже если вы Они нуждаются в них.
Каждый раз, когда Вы импортируете модуль как
const express = require('express')
, экспресс является модулем с функциями или объектами или переменными, присвоенными ему. смотрите на/lib/express
, Вы в состоянии получить доступ к функции createApplication в специальном модуле как [1 118] экспресс () , потому что функция присвоена непосредственно модулю как
экспорт = module.exports = createApplication;
function createApplication(){
var app = function(req, res, next) {
app.handle(req, res, next);
};
//other codes
}
, таким образом, Вы в состоянии получить доступ к функции createApplication, просто назвав экспресс () как функция
теперь при проверке другого раздела специальной библиотеки Вы видите набор других объектов, присоединенных к специальному объекту экспорта также.
/**
* Expose the prototypes.
*/
exports.application = proto;
exports.request = req;
exports.response = res;
/**
* Expose constructors.
*/
exports.Route = Route;
exports.Router = Router;
// other exports
к этим объектам или функции, присвоенной для экспорта специального объекта, можно получить доступ от раздела импорта с помощью экспресса в качестве объекта.
экспресс. {Имя}
express.Route
express.Router etc
В конце, Вы просто экспортируете набор методов или объектов, которые присоединены к module.export специальному объекту в, выражает js файл
для чтения больше на module.export специальном объекте, идут сюда