質問

まず、Ninject 2.0を使用しています

マスターページを挿入したいのですが、どのようにすればよいかわかりません。私が試したのは、System.Web.Mvc.ViewMasterPageから派生するクラスを作成してから、プロパティを作成することです。

[Inject]
public ICacheService<List<Category>> Categories { get; set; }
[Inject]
public IConfigurationSettings Config { get; set; }

ページを実行すると、どちらのプロパティも設定されず、両方ともnullになります。これを行う理由や例に関するアイデアはありますか?ありがとう

-更新

それで、私はさらに調査を行いました。Ninjectはクラスの作成をインターセプトしないため、クラス内のオブジェクトを自分で解決する必要があるようです。だから今私の質問は、カーネルのリゾルバーをどのように作成するのですか?上記のコードはクラスライブラリ内にあるため、カーネルへの参照はありません。私は以下を試しました:( http://www.codethinked.com/post/2009/10/07/Our-Biggest-Enemy -Isne28099t-Developers-Who-Refuse-To-Move-Forward-It-is-Developers-Who-Pretend-To-Move-Forward.aspx

public class KernelResolver
{
    private static IKernel _kernel;

    public KernelResolver(IKernel kernel)
    {
        _kernel = kernel;
    }

    public static T Resolve<T>()
    {
        return _kernel.Get<T>();
    }
}

そして登録:

Bind<KernelResolver>().ToSelf()

まだカーネルはnullです...私はいくつかの例を見る必要がありますが、見つけることができないか、私が探しているものがわからないほど混乱している可能性があります:\

ご協力ありがとうございます!

役に立ちましたか?

解決

質問から始めます。マスターページに何かを挿入したいのはなぜですか。 MVCを使用している場合、モデルを使用して、コントローラー経由でビュー(マスターページを含む)にデータを渡す必要があります。おそらく過度に単純化されている場合、それがMVCフレームワークの本質です。

Ninjectまたは他のIoCコンテナーができることは、コントローラークラスの作成とそれらへの依存関係の挿入を支援することです-実際、ASP.NetでのIoCコンテナーの統合ポイントは、通常コントローラーファクトリーの責任を引き継ぎます。

コントローラーに適切な依存関係を注入すると、ビュー(マスターページを含む)に渡す適切なモデルまたはモデルの状態をコントローラーが決定するのに役立ちます。

MVCパターン(さらに言えば、ASP.Net MVC)は、すべての意思決定(つまり、 control )の責任をコントローラークラスに置くと考えています。コントローラーによって実行される決定は、多数の入力(たとえば、構成、ユーザー入力、環境など)によって形成されますが、ある時点で、コントローラーによってモデルがビューに渡されます。システムの主題の状態を含むモデルを考えます。私の意見では、特にASP.Net MVCのビューは、ロジックがなく、「スクリプト」のようなものであると最もよく見られます。オブジェクトモデルの真のクラスやファーストクラスの市民よりも

おそらく、ビューマスターページを「よりスマート」にする正当な理由があるかもしれませんが、通常、注入しようとしているものの種類はコントローラーに最もよく注入され、必要なデータはビューに渡されます。あなたが達成しようとしていることについてもっと知りたいです。

注:MVCとNinjectの統合を簡単にセットアップして、コントローラーのすべての依存関係を挿入できます。このStackOverflowをご覧ください question / answer スレッドで詳細を確認してください。

他のヒント

KernelResolver クラスは、サービスロケーターパターン(依存関係の[中央]を要求する)を実装します。これは通常、主なアプローチよりも最後の手段です。本当に欲しいのは、依存性注入を機能させることです。

絶対に Bind KernelResolver をしてはいけません-全体的なコンテナとして機能し、システム(MVCの工場など)に接続する必要があります助けてください。

[Inject] 属性は、それ自体では何も魔法をかけません-誰かがそのタイプのオブジェクトを注入するように要求したときに、Ninjectによって使用されます。

探しているのは、適切なタイミングでNinjectを呼び出すようにMVCに指示する方法の例です。これを検索できます(ninject&quot; asp.net mvc&quot;の例?)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top