0

我想知道如何使用 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 实例?

4

1 回答 1

0

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

于 2013-04-24T10:30:36.830 回答