C# 多个链式依赖项,其中一些需要运行时参数

C# 多个链式依赖项,其中一些需要运行时参数,c#,dependency-injection,inversion-of-control,castle-windsor,C#,Dependency Injection,Inversion Of Control,Castle Windsor,我正在为Castle Windsor的一个Web服务项目设置依赖注入。我有一些依赖于运行时参数的类,这些参数也是其他类的依赖项。对于这个问题,我有一个可行的解决方案,但是随着依赖链随着运行时参数的增加而变长,这个解决方案会变得混乱。我正在尝试实现一个更优雅的解决方案 我使用我正在注册的TypedFactoryFacility解决了其中一些依赖关系,如下所示: public interface ISomeClassFactory { ISomeClass Create(ISomeSimple

我正在为Castle Windsor的一个Web服务项目设置依赖注入。我有一些依赖于运行时参数的类,这些参数也是其他类的依赖项。对于这个问题,我有一个可行的解决方案,但是随着依赖链随着运行时参数的增加而变长,这个解决方案会变得混乱。我正在尝试实现一个更优雅的解决方案

我使用我正在注册的TypedFactoryFacility解决了其中一些依赖关系,如下所示:

public interface ISomeClassFactory
{
   ISomeClass Create(ISomeSimpleDependency dependency);
}

...

public interface ISomeSimpleDependencyFactory
{
   ISomeSimpleDependency Create(string runtimeArgument);
}

...

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Register(
        Component.For<ISomeClass>().ImplementedBy<SomeClass>(),
        Component.For<ISomeClassFactory().AsFactory());
    container.Register(
        Component.For<ISomeSimpleDepencency>().ImplementedBy<SomeSimpleDependency>(),
        Component.For<ISomeSimpleDepencencyFactory().AsFactory());
}
public void WebServiceMethod(string runtimeArgument)
{
    ISomeSimpleDependency someSimpleDependency = container.Resolve<ISomeSimpleDependencyFactory>().Create(runtimeArgument);
    ISomeClass someClass = container.Resolve<ISomeSimpleClassFactory>().Create(someSimpleDependency);
    // the rest of the method
}
有没有任何方法可以在不让工厂方法从依赖项3链接起来的情况下实例化某个类

public void WebServiceMethod(string runtimeArgument)
{
    IDependency3 dependency3= container.Resolve<IDependency3Factory>().Create(runtimeArgument);
    IDependency2 dependency2 = container.Resolve<IDependency2Factory>().Create(dependency3);
    IDependency1 dependency1 = container.Resolve<IDependency1Factory>().Create(dependency2);

    ISomeClass someClass = container.Resolve<ISomeClassFactory>().Create(dependency1);

}
public void WebServiceMethod(字符串运行时参数)
{
IDependency3 dependency3=container.Resolve().Create(runtimeArgument);
IDependency2 dependency2=container.Resolve().Create(dependency3);
IDependency1 dependency1=container.Resolve().Create(dependency2);
ISomeClass someClass=container.Resolve().Create(dependency1);
}

我不确定这是否是解决此问题的最佳解决方案,但我能够使用获得一个有效的解决方案

public void安装(IWindsorContainer,IConfigurationStore)
{
container.Register(Component.For().ImplementedBy());
container.Register(Component.For().ImplementedBy());
集装箱。登记(
Component.For().ImplementedBy().LifeStyleScoped(),
组件。用于
public void WebServiceMethod(string runtimeArgument)
{
    IDependency3 dependency3= container.Resolve<IDependency3Factory>().Create(runtimeArgument);
    IDependency2 dependency2 = container.Resolve<IDependency2Factory>().Create(dependency3);
    IDependency1 dependency1 = container.Resolve<IDependency1Factory>().Create(dependency2);

    ISomeClass someClass = container.Resolve<ISomeClassFactory>().Create(dependency1);

}
public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Register(Component.For<ISomeClass>().ImplementedBy<SomeClass>());
    container.Register(Component.For<IDependency1>().ImplementedBy<Dependency1>());
    container.Register(
        Component.For<ISomeSimpleDepencency>().ImplementedBy<ISomeSimpleDepencency>().LifeStyleScoped(),
        Component.For<ISomeSimpleDepencencyFactory().AsFactory());
}
public void WebServiceMethod(string runtimeArgument)
{
    using (container.BeginScope())
    {
        IDependency3 dependency3= container.Resolve<ISomeSimpleDepencencyFactory>().Create(runtimeArgument);

        ISomeClass someClass = container.Resolve<ISomeClass>());
    }
}