如何让Unity将类型解析为另一种类型的属性?

时间:2013-05-15 00:23:30

标签: .net unity-container

想象一下,我有以下课程:

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的新实例。

期望结果

应返回已注册A的{​​{1}}属性的值。

我如何实现这一目标?

其他信息

在我的具体情况中,B是Linq to Sql A,而DataContext是其中一个表。

1 个答案:

答案 0 :(得分:2)

当请求/需要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));