我需要使用 Castle Windsor 来自动解析某种服务,这些服务依赖于引用它们的构造函数的另一个参数。这是一个简单的例子:
我要解决的服务是:
public interface IDependentParameter
{
IValue Value;
object Something;
}
实施者:
public class DependentParameter : IDependentParameter
{
public DependentParameter(IValue value)
{
Value = value;
}
public IValue Value;
public object Something;
}
IValue 是我可以手动注入构造函数的另一项服务
我的依赖类看起来像:
public class DependentClass : IDependentClass
{
IValue Value {get; protected set;}
IDependentParameter DependentParameter{get; protected set;}
public DependentClass (IValue value, IDependentParameter dependentParameter)
{
Value = value;
DependentParameter= dependentParameter;
}
}
解析代码应该是这样的:
var dependant = container.Resolve<IDependantClass>(new { value = knownValue });
在其他帖子中,我看到了引用 AbstractFactory 或 TypedFactoryFacility 的解决方案。但我在该解决方案中看到的缺点是:
- 仅通过查看 DependentClass 构造函数无法知道需要哪些服务(我们将只看到工厂服务)。
- 如何实现工厂,以便它可以引用城堡温莎容器来解析 IDependentParameter 而不是 new 关键字。我绝对需要使用城堡的实例化,因为我正在创建动态代理。