Является ли Autofac ContainerBuilder.Build дорогой операцией? - PullRequest
8 голосов
/ 20 декабря 2010

Я начинаю использовать Autofac и не могу найти ответ на этот вопрос.

Кроме того, когда мне следует вызывать ContainerBuilder.Build ()?

После того, как я вызову ContainerBuilder.Build (), можно ли зарегистрировать другой тип или экземпляр?

Ответы [ 4 ]

5 голосов
/ 20 декабря 2010

Я не могу сказать вам, дорогой метод Build или нет, но если вы следуете шаблону Register Resolve Release , это не имеет значения, потому что у вас должно быть только одинэкземпляр контейнера для приложения.

Вам необходимо вызвать метод Build один раз , чтобы получить экземпляр контейнера, поэтому независимо от того, насколько он дорог (или нет), этоэто стоимость, которую вы должны заплатить .Однако, когда вы используете только один экземпляр контейнера, вы оплачиваете эту стоимость только один раз .

4 голосов
/ 20 декабря 2010

ContainerBuilder.Build () обычно вызывается во время запуска приложения, прежде чем вы фактически начнете вызывать деловое поведение.

Если вам нужно зарегистрировать дополнительные компоненты в существующем контейнере, вы можете это сделать.Для этого в Autofac v2.2 (или более поздней версии) вы можете создать еще один экземпляр instanceerBuilder и использовать метод перегрузки ContainerBuilder.Build (IContainer).

3 голосов
/ 27 апреля 2012
ContainerBuilder _AutoFacContainerBuilder;
IContainer _AutoFacContainer;

_AutoFacContainerBuilder.RegisterType<MyClass>().Named<IMyClass>("MyNameOne");
_AutoFacContainer = AutoFacContainerBuilder.Build();


ContainerBuilder _AnotherBuilder;

_AnotherBuilder.RegisterType<MyClassTwo>().Named<IMyClassTwo>("MyNameTwo");
_AnotherBuilder.Update(_AutoFacContainer);
1 голос
/ 20 декабря 2010

В моих веб-приложениях я использую базовый класс HttpApplication, который вызывает Build для события Application_Start. Затем я использую комбинацию модулей (размещенных на каждой сборке, требующей регистрации), сборочного "сканера" ​​ и интеграции MVC .

Для последующей регистрации вы можете использовать, например, интеграцию MEF или, как сказал Джонатан, использовать перегрузку Build.

Надеюсь, это поможет:)

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