有RegisterPerWebRequest
和RegisterWithContext
(后者最初并未随simple injector一起提供,然而在其高级场景部分提供)。这两种方法单独工作得很好,但我需要将它们结合起来。
我发现RegisterPerWebRequest
中使用了new WebRequestLifestyle()
生命周期(在那里发现它)。因此,我用new WebRequestLifestyle()
代替了Lifestyle.Transient
在RegisterWithContext
中,但是问题在于DependencyContext.ImplementationType
和DependencyContext.ServiceType
都为空。
这是什么问题?
更新1。
所以我想像RegisterPerWebRequest
一样注册类型,但也能够使实例创建器访问注入已注册类型的类型。
我修改了RegisterWithContext
(将生命周期作为参数提取),如下:
public static void RegisterWithContext<TService>(
this Container container,
Func<DependencyContext, TService> contextBasedFactory, Lifestyle lifestyle)
where TService : class
{
//original code
container.Register<TService>(rootFactory, lifestyle);
//original code
}
而对于“每个 Web 请求和上下文”注册,我希望能够使用以下内容:
container.RegisterWithContext<IUnitOfWork>(dependencyContext =>
{
var implementationType = dependencyContext.ImplementationType;
//do some stuff and return preconfigured UnitOfWork
}, new WebRequestLifestyle());
正如我已经提到的,dependencyContext.ImplementationType
是NULL
我正在使用SimpleInjector 2.3.0.0