Как Munq IocContainer избавляется от зарегистрированных объектов в течение жизни? - PullRequest
1 голос
/ 04 августа 2011

Я использую Munq в качестве контейнера IoC для проекта ASP.NET MVC3 с использованием стандартного WebActivator, который предоставляется в пакете NuGet. Вот пример регистрации:

ioc.Register<IUnitOfWork>(i =>
{
    return new UnitOfWork("Data Source=foo");
}).AsRequestSingleton();

Как Munq избавляется от объекта IUnitOfWork в конце запроса? Я не вижу никаких тестов в исходном коде codeplex , которые бы указывали на их удаление !? [

1 Ответ

2 голосов
/ 06 августа 2011

Мунк не будет распоряжаться ничем.Если вам нужна эта возможность, было бы лучше использовать другой контейнер IoC, такой как Autofac.

Однако во многих случаях я сомневаюсь в реальной необходимости позволить контейнеру распоряжаться объектами для вас.Хорошим примером является единица работы, потому что ваш IUnitOfWork в любом случае будет иметь метод Commit(), который, вероятно, вызывается в приложении.Класс, который вызывает Commit, скорее всего, отвечает за время жизни IUnitOfWork и, следовательно, также за вызов commit.

Вы можете решить это с помощью , а не , вводя IUnitOfWork,но впрыскивая IUnitOfWorkFactory.Класс, которому нужна единица работы, может сделать следующее:

using (IUnitOfWork unit = this.uowFactory.CreateNew())
{
    // Do some useful stuff.

    unit.Commit();
}

ОБНОВЛЕНИЕ Декабрь 2012:

Мое мнение о том, какРегистр экземпляров Unit of Work (частично) изменился из-за новых идей и способов разработки приложений.Вместо того, чтобы вводить фабрику, я в настоящее время люблю вводить IUnitOfWork напрямую.Это означает, что было бы хорошо избавиться от единицы работы, когда определенная область (например, веб-запрос) заканчивается.Как объяснял @DaRKoN_, начиная с Munq 3.14, RequestLifetime располагает экземплярами.

Этот вопрос и ответ Stackoverflow дает подробное объяснение того, когда и как вводить единицу работ напрямую, а не вводить фабрики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...