我遇到类(Parent
)具有依赖关系(IScopedInstance
)并且还在方法内动态解析其他接口(IOtherDependency
)的情况。该接口(Dependency
)的实现与原始类具有相同的依赖性。我希望该实例的范围限定为Parent
的实例,即:我想在Parent
和Dependency
中使用相同的实例,但前提是从Parent
内部解析依赖关系我正在使用Castle.Windsor作为DI容器。
public class Parent : IParent
{
public Parent(IScopedInstance instance)
{
}
public void DoSomething()
{
var anotherDependency = container.Resolve<IOtherDependency>();
}
}
public class Dependency : IOtherDependency
{
public Dependency(IScopedInstance instance)
{
}
}
当IOtherDepedency
被注入Parent
:
container.Register(Component
.For<IScopedInstance>()
.ImplementedBy<ScopedInstance>()
.LifestyleBoundTo(x => x.First(xx =>
xx.ComponentModel.Implementation.InheritsOrImplements(typeof(IParent)))));
但可以理解的是,当从方法内部解析它时它不起作用,因为依赖图中没有IParent
(它是一个新的图形)。
实际用例有点不同,我没有直接解析方法中的IOtherDependency
,但我删除了所有不需要的额外信息。
知道怎么做吗?
答案 0 :(得分:0)
首先,你要在你的方法中建立一个工厂,很可能是一个打字的工厂,以便从容器中获取一个实例。 我猜一个范围的生活方式应该符合您的需求,或者如果您的代码在网络应用程序中运行,则需要一个perwebrequest生活方式。