2012-07-16 33 views
2

問題鍵入工廠默默丟棄無法映射到構造函數的參數?

如果一個類型化的工廠拋出一個異常,如果有一個創建函數指定的參數不能被映射到一個構造函數?例如。

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上的構造函數已被更改,但在類型化工廠中創建它的方法尚未更新。

部分解決方案?

我們嘗試了一下,發現一個潛在的解決方案:

public class OurComponentSelector : DefaultTypedFactoryComponentSelector 
{ 
    public override IDictionary GetArguments(MethodInfo method, object[] arguments) 
    { 
     // Check an appropriate constructor can be found, throw exception if not 
    } 
} 

這會是一個適當的變通?

回答

0

是的。這正是ITypedFactoryComponentSelector旨在提供的可擴展性的類型。

Windsor自己的DefaultDelegateComponentSelector在將它們傳遞給容器之前使用相同的擴展點來轉換參數。

相關問題