5

そのため、私は ASP.NET MVC 2 (現在は Visual Studio 2008 の使用にこだわっています) に時間を費やしてきましたが、現在は Ninject 2.2 とその MVC 統合の使用に移行しています。次の場所から Ninject 2.2 と Ninject.Web.Mvc をダウンロードしました。

https://github.com/downloads/ninject/ninject/Ninject-2.2.0.0-release-net-3.5.zip
https://github.com/downloads/ninject/ninject.web.mvc/Ninject.Web.Mvc2 -2.2.0.0-release-net-3.5.zip

私のMVC 2プロジェクトでそれらを参照しました。私の Global.asax.cs ファイルは次のようになります (Ninject.Web.Mvc README の内容とほとんど同じです)。

using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Ninject.Web.Mvc;
using Ninject;

namespace Mvc2 {
    public class MvcApplication : NinjectHttpApplication {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }

        protected override void OnApplicationStarted() {
            AreaRegistration.RegisterAllAreas();
            RegisterRoutes(RouteTable.Routes);
        }

        protected override IKernel CreateKernel() {
            var kernel = new StandardKernel();

            kernel.Bind<IFoo>().To<Foo>();

            return kernel;
        }
    }
}

そして、次のようなホームコントローラー:

using System;
using System.Web;
using System.Web.Mvc;

namespace Mvc2.Controllers {
    public class HomeController : Controller {
        private readonly IFoo foo;

        public HomeController(IFoo foo) {
            this.foo = foo;
        }

        public ActionResult Index() {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";

            return View();
        }
    }
}

プロジェクトを実行して '/' にアクセスするたびに、「このオブジェクトにパラメーターなしのコンストラクターが定義されていません」というメッセージが表示された黄色い画面が表示されます。Ninject が私の Foo サービスを解決せず、それを HomeController に注入していないようです。本当に明らかな何かが欠けていると思いますが、それが見えていません。

Ninject属性を使用せずに、NinjectにFooをHomeControllerに注入させるにはどうすればよいですか?

4

1 に答える 1

4

: IFoo サービスの実装についてもう少し詳しく教えていただけますか? 独自の依存関係はすべて満たされていますか?

自分: うーん、違います。依存関係をバインドしていないことがわかりました。少年、そのエラーメッセージとスタックトレースは誤解を招くものですか!


私の間違いは、IFoo 実装の依存関係の 1 つをバインドしなかったことでした。そのため、Ninject は黙って失敗し、その陽気な方法を続けようとしました。些細な設定から逸脱すると、本当に奇妙な動作につながる可能性があるため、これは本当に残念です. 私の次の質問は、Ninject をできるだけ早く失敗させ、何が問題なのかについて適切なメッセージを提供するにはどうすればよいでしょうか? しかし、今のところ、少なくともそれを続けることができます。

于 2011-04-24T19:04:05.983 に答える