Inheritance 统一分层注入

Inheritance 统一分层注入,inheritance,inversion-of-control,unity-container,Inheritance,Inversion Of Control,Unity Container,请帮助我解决以下目标: 我有定义属性上下文的接口Irespository,作为示例: interface IRepository { IContext Context { get; set; } } interface IOne : IRepository { } interface ITwo : IRepository { } public class One : IOne { [Dependency] public IContext Context { get; se

请帮助我解决以下目标: 我有定义属性上下文的接口Irespository,作为示例:

interface IRepository
{
   IContext Context { get; set; }
}

interface IOne : IRepository
{
}

interface ITwo : IRepository
{
}
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);
   }
}
实现中的属性上下文具有DependencyAttribyte,所有实现都已注册,如以下示例所示:

container.RegisterType<IOne, One>();
container.RegisterType<ITwo, Two>();
container.RegisterType<IContext, Context>();
container.RegisterType();
container.RegisterType();
container.RegisterType();
我想从实现“一”与继承属性价值的“上下文”中解决实现“二”

作为示例:

interface IRepository
{
   IContext Context { get; set; }
}

interface IOne : IRepository
{
}

interface ITwo : IRepository
{
}
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);
   }
}
公共一级:IOne
{
[依赖性]
公共IContext上下文{get;set;}
[依赖性]
公共IUnityContainer容器{get;set;}
公共void Test1()
{
上下文=新上下文();
var two=Container.Resolve();
//我希望这些值是相等的
arest.AreEqual(Context,2.Context);
}
}

如果您能够以另一种方式展示如何使用值继承解析实现,那就太好了。

您可以使用ContainerControlled LifetimeManager注册
IContext
。因此,每次调用
Resolve
都将返回相同的实例


另一种方法是使用IContext。

您可以使用
PerResolveLifetimeManager
。它只是一种暂时的生活方式,但该实例将被重用,而不考虑对象图。但是,要使其正常工作,必须从
Test1
方法中替换对
container.Resolve
的调用。总是喜欢构造函数注入而不是属性注入,并防止从类中调用容器。这种编码方式称为。

ContainerControlled LifetimeManager
创建一个单例。我不确定那是OP想要的。在我看来,他想要“每一次解决”或“终身范围”的生活方式。