2011-10-31 60 views
3

我想用StructureMap的ObjectFactory來處理我的WCF服務使用我的類的實例化的多個參數。雖然我有限的經驗足以處理簡單的1:一個接口和實現它是一個單類之間的映射1,我已經打了其中一個構造函數接受相同接口的多個參數的障礙。StructureMap:混凝土類構造函數接受相同的接口類型

我想我可以在多個具體類,以通過爲每個映射名稱相同的接口聯繫在一起,但我怎麼告訴StructureMap什麼映射使用第一和第二構造函數的參數?

這就是我想要的ObjectFactory來處理我的類:

public interface IPolicy 
{ 
    bool IsValid(string s); 
} 

public class AlphaPolicy : IPolicy 
{ 
    public bool IsValid(string s) { return true; } 
} 

public class NumericPolicy : IPolicy 
{ 
    public bool IsValid(string s) { return true; } 
} 

(當然,MasterPolicy可能也實現:

public class MasterPolicy { 
    public MasterPolicy(IPolicy alfaPolicy, IPolicy numericPolicy) 
    { 
     AlphaPolicy = alphaPolicy; 
     NumericPolicy = numericPolicy; 
    } 

    public IPolicy AlphaPolicy {get; private set; } 
    public IPolicy NumericPolicy {get; private set; } 

    public bool IsValid(string s) 
    { 
     if (!AlphaPolicy.IsValid(s)) return false; 
     if (!NumericPolicy.IsValid(s)) return false; 
     return true; 
    } 
} 

的IPolicy接口由一個以上的類實現IPolicy接口)。

回答

12

您可以指定構造函數的依賴關係,並告訴構造圖,其命名的參數應該具有依賴性:

For<MasterPolicy>.Use<MasterPolicy>() 
    .Ctor<IPolicy>("alphaPolicy").Is<AlphaPolicy>() 
    .Ctor<IPolicy>("numericPolicy").Is<NumericPolicy>(); 
+0

謝謝!這正是我需要更好地掌握StructureMap的必要條件。 –

+0

使MAster Policy Class與Container緊密結合,你不這麼認爲嗎? – Kevorkian

+0

@Kevorkian - 'MasterPolicy'具有在所有容器中沒有引用,所以我看不出它如何能有任何耦合到容器。容器將控制耦合到所有引導/組合的類。 – PHeiberg

相關問題