想象一下,我有以下课程:
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
是其中一个表。
答案 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));