Autofac :Регистрация компонента и разрешение в зависимости от разрешающего родителя

Я хочу зарегистрировать компонент для разрешения с параметрами на основе класса, для которого он может разрешаться. (Это звучит немного запутанно, поэтому я покажу пример ).

Вот объект, который использует регистратор:

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, я хочу иметь возможность сообщить ему 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, который добавляет эту регистрацию.

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

11
задан philt5252 27 July 2012 в 16:06
поделиться