我有以下类层次结构:
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的参数来创建类的实例。还有其他方法可以支持这种设计,还是应该重新考虑我的设计?
答案 0 :(得分:0)
似乎未正确注册组件以满足您的需求。 你能提供一块注册码吗?
我认为您应该尝试"a delegate as component factory"来解决您的问题。 有几个重载可能对你有帮助。
这样的事情:
container.Register(Component.For<ISecondProvider>().
.UsingFactoryMethod(container =>
{
/* your code */
}));
container.Register(Component.For<IFirstProvider>().
.UsingFactoryMethod(container =>
{
var prvoider = container.Resolve<ISecondProvider>();
/* your code */
}));
也可以to pass arguments when you resolve a type。 有一个已回答的问题“Castle Windsor passing constructor parameters”。