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, который добавляет эту регистрацию.

Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос