Я использую простой инжектор в качестве контейнера IoC. Я хотел бы ввести в свой логгер классов, основываясь на наличии области выполнения. Должен быть один регистратор по умолчанию (singleton) и другие, основанные на моем контексте.Регистрация реализации на основе образа жизни simpleinjector
Я уже пробовал что-то вроде этого:
container.RegisterConditional(typeof(ILogger),
x => typeof(NContextLogger<>).MakeGenericType(x.Consumer.ImplementationType),
Lifestyle.Scoped,
x => container.GetCurrentExecutionContextScope() != null);
container.RegisterConditional(typeof(ILogger),
x => typeof(NLogger<>).MakeGenericType(x.Consumer.ImplementationType),
Lifestyle.Singleton,
x => container.GetCurrentExecutionContextScope() == null);
Проблема с созданием любого экземпляра NContextLogger<>
. Потому что когда он создает NLogger<>
, который является singleton, simpleinjector не пытается создать экземпляр NContextLogger
.
Я должен сказать, что я нахожу это довольно странное требование. Почему нужно разрешать объекты вне контекста области контекста активного выполнения? – Steven