我想要注册一个组件来解析基于它可能解析的类的参数.(这听起来有点令人困惑,所以我将展示一个例子).
这是一个使用记录器的对象:
class MyObject : IMyObject
{
public ILogger Logger;
public MyObject(ILogger logger)
{
Logger = logger;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在COULD中传递的记录器在类与类之间是不同的.所以我对如何做到这一点有一个相当修补的想法:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我注册Logger时,我希望能够告诉它className.我希望有一种方法可以做到这一点:
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 = …Run Code Online (Sandbox Code Playgroud)