请帮我解决以下目标: 我有一个接口IRepository定义属性Context,作为示例:
interface IRepository
{
IContext Context { get; set; }
}
interface IOne : IRepository
{
}
interface ITwo : IRepository
{
}
实现中的属性Context具有DependencyAttribyte,所有实现都在以下示例中注册:
container.RegisterType<IOne, One>();
container.RegisterType<ITwo, Two>();
container.RegisterType<IContext, Context>();
我想从实现“One”中解析实现“Two”,并继承属性“Context”的值;
作为样本:
public class One : IOne
{
[Dependency]
public IContext Context { get; set; }
[Dependency]
public IUnityContainer Container { get; set; }
public void Test1()
{
Context = new Context();
var two = Container.Resolve<ITwo>();
// I want that these values would been equal
Assert.AreEqual(Context, two.Context);
}
}
如果您能够以另一种方式展示如何使用值继承来解决实现,那么它会很棒。
答案 0 :(得分:1)
您可以使用ContainerControlledLifetimeManager注册IContext
。因此,对Resolve<IContext>
的每次调用都将返回相同的实例。
另一种方法是register an instance IContext。
答案 1 :(得分:1)
您可以使用PerResolveLifetimeManager
。它只是一种短暂的生活方式,但实例将在对象图中重复使用。但是,要实现此功能,您必须从container.Resolve
方法替换Test1
的来电。总是更喜欢构造函数注入而不是注入属性,并防止从类中调用容器。这种编码方式称为service locator anti-pattern。