2012-12-17 87 views
0

我有2個項目StructureMap覆蓋默認Logger實例

  1. 應用(僅用於WindosForms作爲UI啓動組件)

  2. 組件

組件擁有所有接口和我通過StructureMap(Registry)注入的默認實現。 在這個項目中,我介紹了Logging和所有類的默認實現(Log2Cnsole)的接口並向StructureMap註冊。

我需要的是,如果某人想要使用自己的UI應用程序並刪除默認的應用程序,我希望組件DLL的用戶可以用它覆蓋默認的Log2Console,只有在你實現他的時(例如LogToDB覆蓋Log2Console,如果他在自己的項目中實現接口並通過StructureMap註冊)。

對不起,我的英語不好。

+0

我已經回答假設你1)需要提供默認行爲和2)允許用戶提供當他們想要的時候有一個特定的行爲 –

回答

0

做到這一點的方法是提供調用與具體實現另一個構造一個默認的構造函數:

public interface ILogger 
{ 
    void Log(string text); 
} 

public class ConsoleLogger 
{ 
    public void Log(string text) { Console.WriteLine(text); } 
} 

public class TraceWriter 
{ 
    private ILogger log; 

    // Default behaviour 
    public TraceWriter() : 
    this(new ConsoleLogger()) { } 

    // User specified implementation 
    public TraceWriter (ILogger logger) 
    { 
     this.log = logger; 
    } 
}