在动态解析依赖的同时共享作用域

本文关键字:共享 作用域 依赖 动态 | 更新日期: 2023-09-27 18:14:44

我有一个情况,一个类(Parent)有一个依赖(IScopedInstance),也解析一个方法内动态的其他接口(IOtherDependency)。该接口(Dependency)的实现与原始类具有相同的依赖关系。我希望该实例的作用域为Parent的实例,即:我想在ParentDependency中使用相同的实例,但只有当依赖关系从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应用程序中运行。