Autofac имеет модули, у Windsor есть инсталляторы и реестры StructureMap... с Simple Injector, как я могу упаковать конфигурационную логику в классы многократного использования?
Я пробовал:
public interface IModule { }
public class FooModule : IModule
{
public FooModule(SimpleInjector.Container container)
{
container.RegisterSingleton<IBar, Bar>();
container.RegisterSingleton<IFoo, Foo>();
}
}
И я использую его в корне композиции:
public static void Main(string[] args)
{
var container = new SimpleInjector.Container();
container.RegisterCollection<IModule>(new FooModule(container));
...
}
Однако FooModule
зависит от контейнера и, может быть, не очень хорош...
см. http://code.google.com/p/autofac/wiki/BestPractices:
Если компоненты имеют зависимость от контейнера, посмотрите, как они используют контейнер для извлечения служб и добавления этих сервисов к компоненту (зависимость впрыснутые) аргументы конструктора.