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>();