我是 Autofac 的新手,正在尝试使用工厂解析接口,但似乎无法在文档中找到相关部分来使它正常工作。
我有以下接口来抽象日志记录实现:
public interface ILog
{
void Info(string message);
void Debug(string message);
void Error(string message, Exception exception = null);
}
public interface ILogFactory
{
ILog GetLogger(Type type);
}
然后是这些接口的以下实现:
public class Log : ILog
{
private readonly Action<string> _logDebug;
private readonly Action<string, Exception> _logError;
private readonly Action<string> _logInfo;
public Log(Action<string> logInfo, Action<string> logDebug, Action<string, Exception> logError)
{
_logDebug = logDebug;
_logInfo = logInfo;
_logError = logError;
}
public void Debug(string message)
{
_logInfo(message);
}
public void Error(string message, Exception exception = null)
{
_logError(message, exception);
}
public void Info(string message)
{
_logInfo(message);
}
}
public class Log4NetLogFactory : ILogFactory
{
public Log4NetLogFactory()
{
XmlConfigurator.Configure();
}
public ILog GetLogger(Type type)
{
var logger = LogManager.GetLogger(type);
return new Log(logger.Info, logger.Debug, logger.Error);
}
}
我对如何使用 ILogFactory 解析 Autofac 中的 ILog 感到困惑。我已经为 ILogFactory 注册了一个单例:
builder.RegisterType<Log4NetLogFactory>().As<ILogFactory>().SingleInstance();
但我不确定如何使用传入调用方类型的 ILogFactory 的 GetLogger 方法来解析 ILog 接口。
看来我需要这样的事情:
builder.Register((c, p) => c.Resolve<ILogFactory>().GetLogger(??Caller Type Here??)).As<ILog>();
但我不确定如何将调用者类型放入 GetLogger 构造函数中。
子衿沉夜
相关分类