最新の Autofac を使用しており、異なるコンストラクターに基づいて同じ型とインターフェイスを 2 回登録したいと考えています。
私のクラス/インターフェース
public partial class MyDbContext : System.Data.Entity.DbContext, IMyDbContext
{
public MyDbContext(string connectionString)
: base(connectionString)
{
InitializePartial();
}
public MyDbContext(string connectionString, bool proxyCreationEnabled, bool lazyLoadingEnabled, bool autoDetectChangesEnabled)
: base(connectionString)
{
this.Configuration.ProxyCreationEnabled = proxyCreationEnabled;
this.Configuration.LazyLoadingEnabled = lazyLoadingEnabled;
this.Configuration.AutoDetectChangesEnabled = autoDetectChangesEnabled;
InitializePartial();
}
}
私のautofacセットアップでは、..経由で登録しています
builder.RegisterType<MyDbContext>().As<IMyDbContext>()
.WithParameter((pi, c) => pi.Name == "connectionString", (pi, c) => c.Resolve<IConnectionStringProvider>().ConnectionString)
.InstancePerLifetimeScope();
2番目のコンストラクターをAutofacに登録して、異なるクラスでコンストラクターインジェクションを介して使用できるようにするにはどうすればよいですか? 私は次のようなことを考えていましたが、Autofac はどのクラスを注入するかをどのように認識していますか。
//builder.RegisterType<MyDbContext>().As<IMyDbContext>()
// .WithParameter((pi, c) => pi.Name == "connectionString", (pi, c) => c.Resolve<IConnectionStringProvider>().ConnectionString)
// .WithParameter((pi, c) => pi.Name == "proxyCreationEnabled", (pi, c) => false)
// .WithParameter((pi, c) => pi.Name == "lazyLoadingEnabled", (pi, c) => false)
// .WithParameter((pi, c) => pi.Name == "autoDetectChangesEnabled", (pi, c) => false)
// .Named<MyDbContext>("MyDbContextReadOnly")
// .InstancePerLifetimeScope();