私は、ASP.NET Core環境でAutofacとEF Coreを使用しています。オブジェクトではなくオブジェクトのプロパティの自動注入
マイEFコンテキスト:要求ごとに登録されて
public interface IMyContext { /* ... */ }
public class MyContext : DbContext, IMyContext { /* ... */ }
:
builder.RegisterType<MyContext>().As<IMyContext>().InstancePerLifetimeScope();
問題:一部のクラスでは、私がDbContext.ChangeTracker
を必要としています。しかし私が持っているのはIMyContext
です。
インターフェイスにプロパティとして追加することは望ましくありません(コンシューマに多大な電力を与えます)。キャストを破棄する((DbContext)_context).ChangeTracker
をキャストしたくありません。
だから私は、コンストラクタにChangeTracker
を注入する必要があります。私はthe docsを読んだが、それを登録する方法を理解していない
public Foo(IMyContext context, ChangeTracker changeTracker)
{
_context = context;
_changeTracker = changeTracker;
}
。
ザ・はChangeTracker
は、現在の有効期間スコープのMyContext
から同じものでなければならない注射さ:あなたのコンテキストは、あなたが私たちにコンテキストを解決するためにラムダを取るレジスタの過負荷をできるInstancePerLifetimeScope
として登録されているので
_context.ChangeTracker.Equals(_changeTracker)
キャストは残念ですが必要です。おかげでシリル。 – grokky