0

我有 2 个项目

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

  2. 成分

组件具有我通过 StructureMap (Registry) 注入的所有接口和默认实现。在这个项目中,我介绍了一个日志接口和所有类(Log2Cnsole)的默认实现,并在 StructureMap 中注册。

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

对不起,我的英语不好。

4

1 回答 1

0

The way to do this is offer a default constructor that calls another constructor with a specific implementation:

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;
   }
}
于 2012-12-17T22:18:07.680 回答