0

autofac と mvc 4 を使用するのはこれが初めてです。Nuget パッケージを使用して AutoFac をインストールしました。私のnugetパッケージがインストールされました:

<package id="Autofac" version="3.1.5" targetFramework="net45" />
<package id="Autofac.Mvc4" version="3.1.0" targetFramework="net45" />

ロガーの 3 つの実装があります。

 builder.RegisterType<DbLogger>().As<ILogger>();
 builder.RegisterType<TextLogger>().As<ILogger>();
 builder.RegisterType<MemoryLogger>().As<ILogger>();

私のホームコントローラーは、次のコードを使用して登録されています。

// in case we want to exclude this in external dll
builder.RegisterControllers(Assembly.GetCallingAssembly()); 

3 つの実装すべての My Home コントローラー コンストラクターは簡単です。

private ILogger[] loggers;
public HomeController(ILogger[] loggers)
{
  this.loggers = loggers;
}

特定の「MemoryLogger」を MemoryController に登録するにはどうすればよいですか?

 private ILogger _memoryLogger;
        public MemoryController(ILogger logger)
        {
            this._memoryLogger = logger;
        }

特定の実装でコントローラーを再登録できることを知っています。

Ninjectと同じ

Ninject を使用して同じインターフェースを実装する異なるクラスを注入する

4

2 に答える 2

1

解決策は非常に簡単です:

const string loggerImplementation = "DbLoggerForMemoryController";

builder.RegisterType<DbLogger>().As<ILogger>().Named<ILogger>(loggerImplementation);
builder.RegisterType<TextLogger>().As<ILogger>();            
builder.RegisterType<MemoryLogger>().As<ILogger>();

builder.Register(x => new MemoryController(x.ResolveNamed<ILogger>(loggerImplementation)));

他のみんなの時間を節約できることを願っています:)より良い解決策があれば、共有してください。

于 2013-11-01T15:26:27.980 に答える
0

メタデータ機能を使用できます。詳細については、wiki ページを参照してください。

于 2013-11-01T13:33:51.520 に答える