0

Ninject 3.x と NLog 2.x の Nuget ダウンロードを使用しています。コントローラー クラスでコンストラクター インジェクションを介して ILogger を動作させましたが、モデル クラス内で動作させる方法がわかりません。私のモデルは、ADO.NET EntityObject Generator によって生成されたクラスに関連付けられた部分クラスです。

[Inject] 属性の有無にかかわらずプロパティ インジェクションを試しましたが、常に null が返されます。コントローラーのコンストラクターの注入はすべて自動だったので、何をする必要があるのか​​ わかりません。

最終的には、モデルを独自のライブラリに移動して再利用できるようにしたいと思いますが、今のところ、これを機能させるための答え (asp.net mvc 3 プロジェクトに固有のものであっても) に満足しています。

4

2 に答える 2

0

エンティティには依存関係があってはなりません。したがって、それらは IoC コンテナーによって作成されるべきではありません。ビジネス ロジックがエンティティに含まれないように、設計を再考してください。

于 2012-06-02T19:31:35.380 に答える
0

EF では、少なくとも T4 テンプレートを変更しない限り、モデルの作成に IoC を使用することは実際には許可されていないようです。私ができる 1 つの提案は、次のように ObjectContext のObjectMaterializedイベントを使用することです。

partial void OnContextCreated()
{
    ObjectMaterialized += BAEntities_ObjectMaterialized;
}

public void BAEntities_ObjectMaterialized(object sender, ObjectMaterializedEventArgs e)
{
    if (e.Entity is MyEntityWithLogging)
    {
        //apply initialization logic here
        ((MyEntityWithLogging)e.Entity).Logger = kernel.Get<ILogger>();
    }
}
于 2012-06-01T21:32:33.297 に答える