10
解決する可能性のあるクラスに基づいてパラメータで解決するコンポーネントを登録したいと考えています。 (それはちょっと混乱しているように聞こえるので、例を示します)。クラスへのクラスとは異なる可能性があり、渡された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;
}
}
。私はそれを次のような操作を行うための方法があります願っています:
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を用意したいと考えています。
ありがとうございます!ここで
私はあなたのモジュールを実装しようとするんだけど、私はbuilder.Register()非ジェネリック機能を見つけることありませんよ。 – philt5252
これは 'Autofac.RegistrationExtensions'クラスに存在する拡張メソッドです。あなたは間違いなくそれを持っているはずです。 –
haha ... nevermind ...私はコードの入力を終了していないし、C#がFuncからタイプを暗示することを忘れてしまった。 – philt5252