我想注册一个组件以根据它可能正在解析的类使用参数解析。(这听起来有点令人困惑,所以我将展示一个示例)。
这是一个使用记录器的对象:
class MyObject : IMyObject
{
public ILogger Logger;
public MyObject(ILogger logger)
{
Logger = logger;
}
}
现在传入的记录器可能因类而异。因此,对于如何在下面执行此操作,我有一个相当完善的想法:
class MyLogger : ILogger
{
public string Name{get; protected set;}
public static ILogger GetLogger(string className)
{
Name = className;
MyLogger logger;
// Do something to choose a logger for that specific class
return logger;
}
}
因此,当我注册 Logger 时,我希望能够告诉它类名。我希望有一种方法可以做到这一点:
ContainerBuilder builder = new ContainerBuilder();
builder.Register<MyLogger>(ctx =>
{
string className = //Get resolving class name somehow;
return MyLogger.GetLogger(className);
}).As<ILogger>();
builder.Register<MyObject>().As<IMyObject>();
var container = builder.Build();
IMyObject myObj = container.Resolve<IMyObject>();
//myObject.Logger.Name should now == "MyObject"
我想这样做的原因是避免在代码中使用带有 autofac 的记录器注册我实现的每个类。我希望能够在 xml 中注册所有对象,并且只需有一个 LoggerModule 即可添加此注册。
提前致谢!