Autofac - правильное использование в многомодульном приложении

Я работаю над приложением, которое состоит из многих модулей, причем некоторые из них имеют зависимости от других модулей. Теперь я решил использовать Autofac для решения круговых зависимостей и улучшения архитектуры в целом.

Чтобы настроить autofac, я использую метод xml (http://code.google.com/p/autofac/wiki/XmlConfiguration).

Теперь я не уверен, как реализовать Autofac. Нужно ли иметь ссылку на autofac в каждом модуле в моем приложении? Это означает, что я должен регистрировать все компоненты каждый раз, когда я хочу решить зависимость...

ContainerBuilder builder = new ContainerBuilder();
builder.RegisterModule(new ConfigurationSettingsReader("autofac", configPath));
IContainer container = builder.Build();
IWhatever w = container.Resolve<iwhatever>();
</iwhatever>

Это способ сделать это?

Или лучше ли обернуть Autofac в отдельный модуль? При таком подходе мне пришлось бы регистрировать модули только один раз (когда приложение запускается) и может просто использовать завернутый Autofac для разрешения зависимостей...

IWhatever w = container.Resolve<iwhatever>();
</iwhatever>

Я надеюсь, что кто-то скажет мне лучший способ использования Autofac.

спасибо!

2 ответа

Каждый проект должен иметь зависимость от базового пакета autofac, если вы хотите использовать модули autofac.

Используйте модули autofac, как описано здесь: http://code.google.com/p/autofac/wiki/StructuringWithModules

Обновление

Я описываю, почему вы должны использовать модули здесь: http://www.codeproject.com/Articles/386164/Get-injected-into-the-world-of-inverted-dependenci


Отдельный модуль для контейнера - это не только лучший вариант, но и единственный вариант. Экземпляры контейнера AFAIK IoC должны быть одноточечными.

По крайней мере, я использовал Unity таким образом - вы создаете общедоступный статический экземпляр контейнера, инициализируете его при запуске приложения, а затем получаете доступ к нему из всех ваших модулей.

licensed under cc by-sa 3.0 with attribution.