Autofac: зарегистрировать компонент и разрешить в зависимости от разрешения родительского
Я хочу зарегистрировать компонент для разрешения с параметрами, основанными на классе, для которого он может быть разрешен. (Это звучит немного запутанно, поэтому я покажу пример).
Вот объект, который использует регистратор:
class MyObject : IMyObject
{
public ILogger Logger;
public MyObject(ILogger logger)
{
Logger = logger;
}
}
Теперь регистратор, который передается в 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;
}
}
Поэтому, когда я регистрирую 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 = builder.Build();
IMyObject myObj = container.Resolve<IMyObject>();
//myObject.Logger.Name should now == "MyObject"
Причина, по которой я хочу сделать это таким образом, состоит в том, чтобы избежать регистрации каждого класса, который я реализую, с помощью регистратора с autofac в коде. Я хочу иметь возможность зарегистрировать все объекты в XML и просто иметь LoggerModule, который добавляет эту регистрацию.
Заранее спасибо!