我有以下界面:

public interface ILogger
{
    void Debug(string message, params object[] values);
    void Info(string message, params object[] values);
    void Warn(string message, params object[] values);
    void Error(string message, params object[] values);
    void Fatal(string message, params object[] values);
}

以及以下实现:
public class Log4netLogger : ILogger
{
    private ILog _log;

    public Log4netLogger(Type type)
    {
        _log = LogManager.GetLogger(type);
    }

    public void Debug(string message, params object[] values)
    {
        _log.DebugFormat(message, values);
    }

    // other logging methods here...

}

我的想法是使用structuremap实例化Log4netLogger类,并使用执行日志记录的类的Type。但是,我一辈子都无法弄清楚如何将调用类的类型传递给structuremap,以便可以将其传递给日志记录实现的构造函数。任何有关如何做到这一点(或更好的方法)的建议将不胜感激。

最佳答案

如果类型参数是特定于上下文的,则我认为这不会如所示那样起作用。如果需要在构造函数中传递特定于上下文的内容,则可能必须创建一个工厂接口(interface)和实现,以返回ILogger的实例:

public interface ILoggerFactory
{
    ILogger Create(Type type);
}

public class LoggerFactory : ILoggerFactory
{
    public ILogger Create(Type type)
    {
        return new Log4netLogger(type);
    }
}

可以引导BootStructureMap根据类型提供所需的实例,但是假定您事先知道的类型数量有限。

关于inversion-of-control - 在log4net包装器中使用structuremap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1942900/

10-10 23:33