StructureMap覆盖默认的Logger实例

时间:2012-12-17 21:40:38

标签: c# components structuremap

我有2个项目

  1. 应用(WindosForms仅用作启动组件的UI)

  2. 零件

  3. 组件具有我通过StructureMap(Registry)注入的所有接口和默认实现。 在这个项目中,我为所有类(Log2Cnsole)引入了Logging和默认实现的接口,并向StructureMap注册。

    我需要的是,如果有人想要使用他自己的UI应用程序并删除默认的应用程序,我希望组件DLL的用户可以用他的覆盖默认的Log2Console,只有当他实现他的时候(例如LogToDB覆盖Log2Console,如果他实现的话)在他自己的项目中接口并通过StructureMap注册。

    抱歉我的英语不好。

1 个答案:

答案 0 :(得分: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;
   }
}