我想知道如何使用 Unity 执行以下操作....
我有一段简单的代码,其中“每个请求”创建一个对象,在大多数情况下,我使用注入工厂来构建 ILogger 实例(每个请求)......如下......
container.RegisterType<ILogger>(new InjectionFactory( factory => factory.Resolve<ILoggingFactory>() ));
到目前为止非常简单......但是想象一下,我在一个 Web 请求中对多个对象进行了多次调用,当请求进来时,我想创建和使用上面的记录器,但我希望后续调用可以用于已经存在的实例存在....如下
// This should use the RegisterType functionality (above) to create a new instance of the logger
public class A : IAIntf
{
public AConstructor(ILogger log)
{ .. }
}
// This should use the logger which was constructed when A was created
public class B : IBIntf
{
public BConstructor(ILogger log)
{ .. }
}
此代码为 A 类正确创建了一个接口,但在创建 B 类时未能重用该接口,使用 ..
unity.GetService(typeof(T)); // Unity thinks T is IBIntf (which is correct)
.. 但在解决方案期间,Unity 无法重用实例化类 A 时创建的 ILogger 类。
我认为问题是Unity需要维护ILogger接口的生命周期,所以我调整了容器注册如下,但是创建了一个新的ILogger :(
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>() ));
如何告诉 unity 给我一个 B 类的新实例,但重用也传递给 A 类的 ILogger 接口,而不是创建一个新的 ILogger 实例?