问题
如果创建函数中指定的参数不能映射到构造函数,那么类型化工厂是否应该抛出异常?例如。
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
}
}
这是一个合适的解决方案吗?
发布于 2012-07-16 23:34:26
是。这正是ITypedFactoryComponentSelector打算提供的扩展性类型。
温莎自己的DefaultDelegateComponentSelector在将参数传递给容器之前使用相同的扩展点来转换参数。
https://stackoverflow.com/questions/11506789
复制相似问题