我是一名有用的助手,可以为您翻译文本。
我在使用依赖注入时遇到了一个小问题。为了描述这个问题,我将使用一个简单的例子。假设我正在编写记录器应用程序,我的最终用户可以选择将日志保存到文件还是写入控制台。用户通过在运行应用程序时选择复选框来控制它。他可以选择两者或仅选择其中一个。选择后,他点击“LOG”按钮执行操作。 现在根据我对DI的理解,我应该创建接口:
public interface ILogger
{
void log();
}
还有两种实现方式
public class ConsoleLogger : ILogger
{
public void log()
{
...
}
}
public class FileLogger : ILogger
{
public void log()
{
...
}
}
我知道我可以在例如Unity容器中注册两个实现,并使用表格在构造函数中获取它们,但是如果用户只选择一个复选框,则无法识别哪个实现是FileLogger,哪个是ConsoleLogger。
第二个选择是使用服务定位器模式按名称从IOC解析实现。我不知道这是否是一个好方法。
在我的真实应用程序中,我将拥有比两个更多的选项,并且每个选项都将有很多共享接口。
也许更好的方法是使用MEF?
应用程序将使用WPF + PRISM编写。