1

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

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

class B
{
}

我还有一个A注册为单例的 Unity 容器:

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

我想使用容器来解决B

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

结果

的新实例Bb变量中。

期望的结果

应返回已注册属性的值AB

我怎样才能做到这一点?

附加信息

在我的具体情况下,A是一个 Linq to Sql DataContext,并且B是表之一。

4

1 回答 1

2

您可以使用在A.B请求/需要 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));
于 2013-05-16T07:55:59.937 回答