如何使用structuremap解决子类和父类之间的相同依赖关系
本文关键字:依赖 关系 之间 父类 structuremap 何使用 解决 子类 | 更新日期: 2023-09-27 18:00:27
我有几个类看起来像这个
public class ParentClass
{
public ParentClass(IChildClass childClass, IDependency dependency)
{ }
}
public ChildClass : IChildClass
{
public ParentClass(IDependency dependency)
{ }
}
有没有一种方法可以通过StructureMap注册ParentClass,使其与ParentClass
和IChildClass
之间的同一实例IDependency
解析?
编辑
为了澄清,我希望解析ParentClass
,就好像它是手动创建的一样(根据Fox先生的回答):
IDependency dependency = new Dependency();
ChildClass childClass = new ChildClass(dependency);
ParentClass parentClass = new ParentClass(childClass, dependency);
IDependency
应该而不是是单例。我想每次使用不同的IDependency
来解析ParentClass
。
这里的代码将为Parent和child提供相同的IDdependency。
var container = new Container(x => {
x.For<IChildClass>().Use<ChildClass>();
x.For<IDependency>().Use<Dependency>();
});
var firstParent = container.GetInstance<ParentClass>();
如果你在哪里要求另一个container.GetInstance<ParentClass>();
,它会给你一个新的父母、孩子和依赖关系。如果您想将IDdependency作为一个单独的类,以便每次请求父类或子类时都使用它,那么您可以使用Singeleton方法注册它:x.For<IDependency>().Singleton().Use<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容器。
将一个IDdependency对象的引用传递给两个构造函数:
IDependency dependency = new Dependency();
ChildClass childClass = new ChildClass(dependency);
ParentClass parentClass = new ParentClass(childClass, dependency);