2

Unityを使用してどのオーバーロードされたコンストラクターを選択するかを尋ねる投稿をたくさん見ましたが、私の質問は少し異なり、答えを理解できません。インターフェイス(部分コード)を継承する次のクラスがあります。

public class UnitOfWork : IUnitOfWork
{
    private DbContext _context;

    public UnitOfWork(DbContext context)
    {
        _context = context;
    }

}

だから今私はユニティを使って具体的なタイプを以下のようなインターフェースに解決しようとしています:

container.RegisterType<IUnitOfWork, UnitOfWork>();

ただし、解決時にEntityFrameworkコンテキストをその具象型に渡す必要があります。私はこのようなことをしたい

container.RegisterType<IUnitOfWork, UnitOfWork(new AdventureWorks2008R2Entities())>();

もちろん、上記のコードが正しくないことを知っており、InjectionConstructorクラスの使用について読んだことがありますが、ここでは当てはまらないと思います。

UnitOfWorkだから私の質問は、 Unity IoCを使用して具象型を解決するときに、クラスでそのコンストラクターの値をどのように定義するのですか?

ありがとう!

4

2 に答える 2

2

意図したとおりにクラスを使用できInjectionConstructor、次の登録はうまくいきました。

container.RegisterType<IUnitOfWork, UnitOfWork>(new InjectionConstructor(new AdventureWorks2008R2Entities()));

次のリンクは、これをもう少しよく理解するのに役立ちました。

注入されたパラメータとプロパティ値の登録

于 2013-01-21T14:36:50.753 に答える
2

DbContext の登録を追加する必要があります。container.RegisterType<DbContext, AdventureWorks2008R2Entities>();

IoC コンテナーの主要な機能の 1 つは、自動配線であることを思い出してください。どのインスタンスを使用するかを登録ごとに指定する必要はありません。インターフェイス/クラスを実装に登録し、適切な場所に配置するだけです(そして、異常なことをしている理想的にはまれな場合にオーバーライドします)。

于 2013-01-19T00:52:53.153 に答える