在动态解析依赖关系的同时共享范围

时间:2014-07-24 16:44:29

标签: c# dependency-injection inversion-of-control castle-windsor

我遇到类(Parent)具有依赖关系(IScopedInstance)并且还在方法内动态解析其他接口(IOtherDependency)的情况。该接口(Dependency)的实现与原始类具有相同的依赖性。我希望该实例的范围限定为Parent的实例,即:我想在ParentDependency中使用相同的实例,但前提是从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,但我删除了所有不需要的额外信息。

知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

首先,你要在你的方法中建立一个工厂,很可能是一个打字的工厂,以便从容器中获取一个实例。 我猜一个范围的生活方式应该符合您的需求,或者如果您的代码在网络应用程序中运行,则需要一个perwebrequest生活方式。