Я пытаюсь решить проблему с контейнером Autofac IoC.Использование Autofac в библиотеке классов
Мой веб-приложение имеет следующие части:
- веб-приложения
- ядра (Shared) библиотеки.
- Модули
Каждый модуль имеет ссылку на библиотеку ядра (который включает в себя код ниже), и каждый модуль должен иметь возможность зарегистрировать свои собственные типы. Поэтому мне нужно иметь один общий контейнер между приложением и модулями.
У меня есть код на следующий контейнер:
public static class DependencyContainer
{
public static IContainer Container { get; private set; }
public static ContainerBuilder Builder { get; private set; }
public static void RegisterType<TFrom, TTo>() where TTo : TFrom
{
Builder.RegisterType<TTo>().As<TFrom>();
}
public static T ResolveType<T>()
{
return Container.Resolve<T>();
}
public static void InitContainer()
{
Builder = new ContainerBuilder();
Container = Builder.Build();
}
}
Этот контейнер находится в главном (ядро) библиотеке. Когда приложение запускается, он вызывает InitContainer() из global.asax. После этого я пытаюсь зарегистрировать новый тип из своих модулей приложения, используя метод RegisterType().
Но после этого я не могу разрешить любые типы. Он просто выдает исключение, что этот тип не был зарегистрирован.
Основная идея этого кода заключается в том, что я смогу разрешить любой тип из любого модуля и веб-приложения, используя только один общий контейнер.
Может ли кто-нибудь помочь мне с этой проблемой? Есть ли более элегантное архитектурное решение для использования одного общего контейнера IoC между несколькими библиотеками?
Заранее благодарен!
+1 для использования модулей. Однако я бы использовал Reflection для поиска и загрузки всех модулей – jgauffin
-1 для использования модулей. Мне не нравятся модули ;-) – Steven
почему? И как бы вы решили это? – jgauffin