Я хочу зарегистрировать компонент для решения с параметрами, основанными на классе, для которого он может быть разрешен. (Это звучит немного запутанно, поэтому я покажу пример).
Здесь объект, который использует регистратор:
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, я хочу сказать ему имя класса. Я надеюсь, что есть способ сделать это, похожее на это:
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, который добавляет эту регистрацию.
Спасибо заранее!