2
我想为不同类型的服务选择不同的记录器。在我下面的类方案中,我想使用DbAppender来处理需要登录到文件的服务,该服务需要登录到db和FileAppender。通过改变不同的构造类型来选择特定类型的结构图配置
这里是一流的设计,我有:
public interface ILogger
{
}
public class Logger : ILogger
{
private readonly IAppender _appender;
public Logger(IAppender appender)
{
_appender = appender;
}
}
public interface IAppender
{
}
public interface IRepository
{
}
public class DbAppender : IAppender
{
private IRepository _repository;
public DbAppender(IRepository repository)
{
_repository = repository;
}
}
public class FileAppender : IAppender
{
}
public interface IHelloDbService
{
}
public class HelloServiceWithDbLog : IHelloDbService
{
private readonly ILogger _logger;
public HelloServiceWithDbLog(ILogger logger)
{
_logger = logger;
}
}
public interface IHelloFileService
{
}
public class HelloServiceWithFileLog : IHelloFileService
{
private readonly ILogger _logger;
public HelloServiceWithFileLog(ILogger logger)
{
_logger = logger;
}
}
现在我必须相应地配置structureMap依赖注入,这样的DbService它必须选择记录仪与数据库的能力和的FileService,它必须选择记录仪与文件功能。
// this has to configure to choose Logger with FileAppender.
x.For<IHelloFileService>().Use<HelloServiceWithFileLog>();
.Ctor<ILogger>().Is<Logger>();
// this has to configure to choose logger passing DbAppender.
x.For<IHelloDbService>().Use<HelloServiceWithDbLog>();
.Ctor<ILogger>().Is<Logger>();