我有一个ILog接口和2种可能的实现:控制台日志和文件日志。我在MVC应用程序中使用温莎城堡因此,我有以下的控制器安装代码:我有下面的代码Windsor Castle给定服务的多个组件
container.Register(
Component.For<ILogFactory>().ImplementedBy<LogFactory>().Named("first").OnCreate(x => x.initialize(LogType.Console, null)).LifestyleSingleton(),
Component.For<ILogFactory>().ImplementedBy<LogFactory>().Named("second").OnCreate(x => x.initialize(LogType.File, null)).LifestyleSingleton(),
Component.For<ILog>().UsingFactoryMethod(kernel => kernel.Resolve<ILogFactory>("first").GetLog(LogType.Console)).Named("first_log").LifestyleSingleton(),
Component.For<ILog>().UsingFactoryMethod(kernel => kernel.Resolve<ILogFactory>("second").GetLog(LogType.File)).Named("second_log").LifestyleSingleton()
);
在我的TestController:
private ILog log;
public TestController(ILog _log)
{
log = _log;
}
我想知道我怎么能决定注入名为first_log或second_log的ILog
单元测试通常具有被测定物1类和0到许多假类(嘲笑或存根)。您不测试DI配置 - 这是您的应用程序的一部分 - 通常您不使用DI容器进行单元测试。所以,假设'TestController'是一个模拟,在这种情况下测试的类是什么?如果您正在测试特定的记录器或特定的日志工厂,则应该使用'new'关键字在测试中创建它的一个实例。 – NightOwl888
这不是一个单元测试:我刚刚命名为控制器TestController,但可以将其称为myController或任何您想要的。我只是想知道如何在这个控制器,我可以处理我想要注入的日志,基于它的名字 –
当谈到日志记录,通常有一个日志记录组件('ILog')和配置用于在运行时确定它应该记录的地方 - 文件,控制台,数据库等 - 以及在什么级别 - 调试,警告,错误等。这允许更改日志配置而无需重新编译代码。 Log4net就是一个很好的例子。 –