Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 统一,每个请求的生存期_.net_Dependency Injection_Asp.net Web Api_Unity Container - Fatal编程技术网

.net 统一,每个请求的生存期

.net 统一,每个请求的生存期,.net,dependency-injection,asp.net-web-api,unity-container,.net,Dependency Injection,Asp.net Web Api,Unity Container,我想知道我是如何做到团结一致的 我有一段简单的代码,其中一个对象是“每个请求”创建的,在大多数情况下,我使用注入工厂来构建ILogger实例(每个请求)。。。如下 container.RegisterType<ILogger>(new InjectionFactory( factory => factory.Resolve<ILoggingFactory>() )); 这段代码正确地为类A创建了接口,但在创建类B时使用..无法重用该接口 unity.GetServ

我想知道我是如何做到团结一致的

我有一段简单的代码,其中一个对象是“每个请求”创建的,在大多数情况下,我使用注入工厂来构建ILogger实例(每个请求)。。。如下

container.RegisterType<ILogger>(new InjectionFactory( factory => factory.Resolve<ILoggingFactory>() ));
这段代码正确地为类A创建了接口,但在创建类B时使用..无法重用该接口

unity.GetService(typeof(T)); // Unity thinks T is IBIntf (which is correct)
。。但是在解析过程中,Unity未能重用在实例化类A时创建的ILogger类

我认为问题在于Unity需要维护ILogger接口的生存期,因此我对容器注册进行了如下调整,但创建了一个新的ILogger:(

container.RegisterType(新的HttpRequestLifetimeManager(),
新建InjectionFactory(factory=>factory.Resolve());
//也试过
container.RegisterType(新的PerResolveLifetimeManager(),
新建InjectionFactory(factory=>factory.Resolve());

我如何告诉unity给我一个新的B类实例,但重用也传递给a类的ILogger接口,而不是创建一个新的ILogger实例?

我想我已经设法解决了这个问题-我想我的问题是HttpContext.Current在类库中,因此似乎无法使用callcontext I正确解决nstead似乎解决了这个问题

unity.GetService(typeof(T)); // Unity thinks T is IBIntf (which is correct)
container.RegisterType<ILogger>(new HttpRequestLifetimeManager<ILogger>(), 
    new InjectionFactory( factory => factory.Resolve<ILoggingFactory>() ));

// Also tried
container.RegisterType<ILogger>(new PerResolveLifetimeManager(), 
    new InjectionFactory( factory => factory.Resolve<ILoggingFactory>() ));