C# 如何使用structuremap解决子类和父类之间的相同依赖关系

C# 如何使用structuremap解决子类和父类之间的相同依赖关系,c#,.net,structuremap,C#,.net,Structuremap,我有几节课是这样的 public class ParentClass { public ParentClass(IChildClass childClass, IDependency dependency) { } } public ChildClass : IChildClass { public ParentClass(IDependency dependency) { } } 有没有一种方法可以通过StructureMap注册ParentClass,这样

我有几节课是这样的

public class ParentClass
{
    public ParentClass(IChildClass childClass, IDependency dependency)
    { }
}

public ChildClass : IChildClass
{
    public ParentClass(IDependency dependency)
    { }
}
有没有一种方法可以通过StructureMap注册ParentClass,这样它就可以通过一个
IDependency
来解析,这个
ParentClass
IChildClass
之间的相同实例

编辑

为了澄清,我希望解析
父类
,就好像它是这样手动创建的(根据MrFox的回答):


IDependency
应该不是单身。每次我都想用不同的
IDependency
解析
ParentClass

将一个IDependency对象的引用传递给两个构造函数:

IDependency dependency = new Dependency();
ChildClass childClass = new ChildClass(dependency);
ParentClass parentClass = new ParentClass(childClass, dependency);

我无法回答StructureMap是否能做到这一点。但是,使用工厂从父级中创建子级可以提供与IoC容器无关的解决方案

public interface IChildFactory {
  IChild Create(IDependency dependency);
}

public class ParentClass
{
  private readonly IChildClass _child;

  public ParentClass(IChildFactory childFactory, IDependency dependency)
  {
    _child = childFactory.Create(dependency);
  }
}

class ChildFactory : IChildFactory 
{
  IChildClass Create(IDependency dependency)
  {
    return new ChildClass(dependency);
  }
}

现在,所有的
IChild
实例都将由这个简单的工厂创建,而不是通过IoC容器创建。

这里的代码将为父级和子级提供相同的IDependency

var container = new Container(x => {
            x.For<IChildClass>().Use<ChildClass>();
            x.For<IDependency>().Use<Dependency>();
        });

var firstParent = container.GetInstance<ParentClass>();
var容器=新容器(x=>{
x、 For().Use();
x、 For().Use();
});
var firstParent=container.GetInstance();

如果您想请求另一个
container.GetInstance()它将为您提供一个新的父项、子项和依赖项。如果希望IDependency作为Singleton,以便每次请求父类或子类时都使用它,那么可以使用Singleton方法注册它:
x.for().Singleton().Use()

我正在寻找如何设置StructureMap来解析这样的父类。因此,调用
ObjectFactory.GetInstance()
将返回一个
ParentClass
,返回方式与您手动执行的方式相同。我希望能够创建一个
ParentClass
,其中包含一个
ChildClass
,两者共享相同的
IDependency
。例如,您创建了一个具有一个
IDependency
实例的
ParentClass
,以及一个具有另一个
IDependency
实例的
ChildClass
。我也不想成为单身汉。创建
父类
的单独实例时,它们应该具有不同的
独立性
。我将更新我的问题以澄清。我在这里提供的示例对于传递给ParentClass构造函数的ParentClass和ChildClass具有相同的IDependency。Structuremap使用PerRequest生命周期,而不是大多数IoC使用的临时生命周期。
var container = new Container(x => {
            x.For<IChildClass>().Use<ChildClass>();
            x.For<IDependency>().Use<Dependency>();
        });

var firstParent = container.GetInstance<ParentClass>();