我有2个项目
应用(WindosForms仅用作启动组件的UI)
零件
组件具有我通过StructureMap(Registry)注入的所有接口和默认实现。 在这个项目中,我为所有类(Log2Cnsole)引入了Logging和默认实现的接口,并向StructureMap注册。
我需要的是,如果有人想要使用他自己的UI应用程序并删除默认的应用程序,我希望组件DLL的用户可以用他的覆盖默认的Log2Console,只有当他实现他的时候(例如LogToDB覆盖Log2Console,如果他实现的话)在他自己的项目中接口并通过StructureMap注册。
抱歉我的英语不好。
答案 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;
}
}