【问题标题】:How can I make Unity resolve a type to a property of another type?如何让 Unity 将类型解析为另一种类型的属性?
【发布时间】:2013-05-15 00:23:30
【问题描述】:

假设我有以下课程:

class A
{
    public B B { get; set; }
}

class B
{
}

我还有一个 Unity 容器,其中 A 注册为单例:

container = new UnityContainer();
container.RegisterType<A>(new ContainerControlledLifetimeManager());

我想用容器解析一个B

var b = container.Resolve<B>();

结果

B 的新实例位于 b 变量中。

期望的结果

应该返回注册的AB属性的值。

我怎样才能做到这一点?

附加信息

在我的具体情况下,A 是 Linq to Sql DataContextB 是表之一。

【问题讨论】:

    标签: .net unity-container


    【解决方案1】:

    当请求/需要 B 的实例时,您可以使用返回 A.B 的 InjectionFactory:

    IUnityContainer container = new UnityContainer();
    container.RegisterType<A>(new ContainerControlledLifetimeManager());
    container.RegisterType<B>(new InjectionFactory(c => c.Resolve<A>().B));
    
    var a = container.Resolve<A>();
    
    // A.B is set somewhere
    a.B = new B();
    
    var b = container.Resolve<B>();
    
    System.Diagnostics.Debug.Assert(ReferenceEquals(a.B, b));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      相关资源
      最近更新 更多