【发布时间】:2013-11-25 13:28:34
【问题描述】:
在我的项目中使用依赖注入有一个小问题。为了描述问题,我将使用简单的示例。假设我正在编写记录器应用程序,并且我的最终用户能够选择是否应将日志保存到文件或写入控制台。用户通过在运行的应用程序中选择复选框来控制它。他可以选择两者或只选择一个。选择后,他单击“LOG”按钮执行操作。 现在,根据我对 DI 的了解,我应该创建接口:
public interface ILogger
{
void log();
}
还有两个实现
public class ConsoleLogger : ILogger
{
public void log()
{
...
}
}
public class FileLogger : ILogger
{
public void log()
{
...
}
}
我知道我可以在例如统一容器中注册这两个实现,并通过使用表在构造函数中获取它们,但是我无法确定哪些实现是 FileLogger,哪些是 ConsoleLogger(如果用户只选择一个复选框)
第二个选项是使用服务定位器模式通过名称解析来自 ioc 的实现。不知道是不是好办法
在我的实际应用程序中,我将有两个以上的选项,并且每个选项都会有很多共享接口。
也许使用 MEF 更好?
应用程序将使用 WPF + PRISM 编写。
【问题讨论】:
标签: c# wpf design-patterns dependency-injection inversion-of-control