5

asp.net WebフォームにNinjectまたはDIを実装するにはどうすればよいですか? にある次の解決策を試しました。(ジェイソンの答え)

  1. 新しい ASP.NET WebForms プロジェクトを作成する
  2. NuGet を使用して Ninject.Web ライブラリを追加します (これにより、Ninject.Web.Common および Ninject ライブラリもダウンします)。
  3. カスタム バインドを App_Start / NinjectWebCommon.cs / RegisterServices メソッドに登録します。
  4. ページで属性注入を使用する

ASP.NET Web アプリケーションでうまく機能します。

問題は、Web アプリケーションではなく、 ASP.NET Web サイトで DI に Ninject を使用したいということです。

NinjectWebCommon / RegisterServices にカスタム バインディングを登録しました。

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ITestRepository>().To<TestRepository>();
}

Webページで私はそれを注入します:

public partial class _Default : System.Web.UI.Page
{
    [Inject]
    public ITestRepository _repository { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        System.Diagnostics.Trace.WriteLine(_repository.ExecuteOperation());
    }
}

常に null 参照例外をスローし、Web アプリケーションとは異なり、NinjectWebCommon.cs 内のブレークポイントに到達することはありません。

Web サイトで Ninject 3 を機能させるには、他に何をする必要がありますか?

4

2 に答える 2

10

あなたへの最初のアドバイスは...

ASP.NET Web サイトを使用しないでください。それらが存在することを忘れてください。それらは絶対に避けてください。それらは、レガシーな理由でまだここにあるだけの時代への時代錯誤的な逆戻りです。

私の2番目のアドバイスは...

Web サイト プロジェクトを引き続き使用する場合は、頭痛薬が必要になるため、多額の投資を行ってください。

3 つ目のアドバイスは...

最初のアドバイスを参照してください。

私の4番目のアドバイスは...

それが Web サイト プロジェクトであるかどうかをまったく制御できない場合は、Ninject またはその他の DI コンテナーを使用するという考えをあきらめてください。Web サイト プロジェクトは、Web アプリケーション サイトとは異なる一連の基本クラスから継承します。同じように機能させることはできません。おそらく、適合させるために多くの時間を費やすことになるでしょう。

編集:

基本的に、コード モデルの動作は Web サイトと Web アプリケーションで大きく異なります。Web サイト アプリには名前空間がありませんが、Web アプリケーション アプリには名前空間があります。これにより、これらがどれほど大きく異なるかがわかります。

アクティベーションプロセスが両方で同じように機能するかどうかは完全にはわかりません.

しかし、それをすべて言った。コードに明らかな問題があります。あなたのページは、Ninject.Web.PageBase ではなく System.Web.UI.Page から派生しています。

于 2012-04-22T22:42:41.047 に答える
1

リンク先の他の質問によると、ページを継承する必要がありますNinject.Web.PageBase。あなたのページはSystem.Web.UI.Page、依存リポジトリを注入する方法がわからない から継承しているようです。

于 2012-04-22T23:00:12.007 に答える