1

私は、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) 

答えて

2

とその後、現在のlifetimescopeを使用するラムダのchangeTracker property.

builder.Register(c => ((DbContext)c.Resolve<IMyContext>()).ChangeTracker) 
     .As<ChangeTracker>() 
     .InstancePerLifetimeScope(); 

c.Resolve<IMyContext>()にアクセス

+0

キャストは残念ですが必要です。おかげでシリル。 – grokky

関連する問題