解決する可能性のあるクラスに基づいてパラメーターで解決するコンポーネントを登録したいと考えています。(少しややこしいので、例を示します)。
ロガーを使用するオブジェクトは次のとおりです。
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 が必要です。
前もって感謝します!