0

我有以下类层次结构:

public class FirstProvider : IFirstProvider
{        
    public FirstProvider (string data, ISecondProvider provider)
    {
        ...
    }
}

public class SecondProvider : ISecondProvider
{
    public SecondProvider (string data)
    {
        ...
    }
}

public interface IProviderFactory
{
    T Create<T>(string data) where T : IProvider;
}

IFirstProvider 和 ISecondProvider 都实现了 IProvider 并在容器上正确注册。我想要做的是从我的 IProviderFactory 获取 FirstProvider 的实例,如下所示:

public void DoSomething()
{
    var provider = _providerFactory.Create<IFirstProvider>("my data");
}

此时我收到以下异常:

“缺少依赖。

组件 SecondProvider 依赖于字符串,无法解析。

确保依赖项在容器中正确注册为服务,或作为内联参数提供。”

Windsor 似乎没有通过它必须解析的依赖链来传递 ITypedFactory 的参数以创建类的实例。有没有其他方法可以支持这个设计,或者我应该重新考虑我的设计?

4

1 回答 1

0

似乎未根据您的需要正确注册组件。你能提供一个注册码块吗?

我认为您应该尝试“作为组件工厂的代表”来解决您的问题。有几个重载可能会对您有所帮助。

像这样的东西:

container.Register(Component.For<ISecondProvider>().
    .UsingFactoryMethod(container =>
    {
        /* your code */
    }));
container.Register(Component.For<IFirstProvider>().
    .UsingFactoryMethod(container =>
    {
        var prvoider = container.Resolve<ISecondProvider>();
        /* your code */
    }));

解析类型时也可以传递参数。有一个已回答的问题“ Castle Windsor 传递构造函数参数”。

于 2013-09-14T20:08:02.330 回答