在动态解析依赖的同时共享作用域
本文关键字:共享 作用域 依赖 动态 | 更新日期: 2023-09-27 18:14:44
我有一个情况,一个类(Parent
)有一个依赖(IScopedInstance
),也解析一个方法内动态的其他接口(IOtherDependency
)。该接口(Dependency
)的实现与原始类具有相同的依赖关系。我希望该实例的作用域为Parent
的实例,即:我想在Parent
和Dependency
中使用相同的实例,但只有当依赖关系从Parent
内部解决时,我才使用城堡。温莎作为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
,但我删除了所有不需要的额外信息。
你知道怎么做吗?
首先,你应该在你的方法中有一个工厂,很可能是一个类型工厂,以便从容器中获得一个实例。我想一个范围的生活方式应该适合你的需求,或者一个perwebrequest的生活方式,如果你的代码在一个web应用程序中运行。