autofac - правильное использование в мультимодульном приложении - PullRequest
6 голосов
/ 26 марта 2012

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

Для настройки автофака я использую метод xml (http://code.google.com/p/autofac/wiki/XmlConfiguration).

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

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

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

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

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

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

спасибо!

Ответы [ 2 ]

7 голосов
/ 26 марта 2012

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

Используйте модули автозапуска, как описано здесь: http://autofac.readthedocs.io/en/latest/configuration/modules.html

Обновление

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

0 голосов
/ 26 марта 2012

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

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

...