问题
如果创建函数中指定的参数无法映射到构造函数,类型化工厂是否应该抛出异常?例如
public class Foo
{
public Foo() : Foo(new Guid())
{
}
// Used to be 'public Foo(string bar)'
public Foo(Guid guid)
{
}
}
public interface FooFactory
{
Foo CreateFoo(string bar);
}
我们发现部分错误是由类型化工厂在无法在 Foo 上找到接受字符串的构造函数时静默调用默认构造函数而不是抛出异常引起的。 Foo 上的构造函数已更改,但在类型化工厂中创建它的方法尚未更新。
部分解决方案?
我们做了一些实验并找到了一个可能的解决方案:
public class OurComponentSelector : DefaultTypedFactoryComponentSelector
{
public override IDictionary GetArguments(MethodInfo method, object[] arguments)
{
// Check an appropriate constructor can be found, throw exception if not
}
}
这是一个合适的解决方法吗?
最佳答案
是的。这正是 ITypedFactoryComponentSelector 旨在提供的可扩展性类型。
Windsor 自己的 DefaultDelegateComponentSelector 在将参数传递给容器之前使用相同的扩展点来转换参数。
关于c# - 类型化工厂静默丢弃无法映射到构造函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11506789/