2017-02-13 11 views
0

私は "Freeman pro asp.net mvc 5"の本(第7章)を使用しています。ASP.NET MVC + NinjectWebCommon

NinjectWebCommon.csでコードが実行されることはありませんので、私は常にエラー取得しています:

問題がある「このオブジェクトのために定義されていませんパラメータなしのコンストラクタを。」 Webサーバーはこのファイルをまったく見ないようですが、私はすべてのメソッドにブレークポイントを持ち、アプリケーションを実行しているときに決してそれらに到達しません。

まず、本の説明書にすべて従って、自分でプロジェクトを作った。私はこのエラーがある。

第2に、公式サイトからコード例をダウンロードし、プロジェクトを開いて実行しようとしました。私はまだこのエラーがあります。

第3に、私は全く新しい単純なmvc5 + ninjectアプリケーションを作成しましたが、まだこのエラーがあります。

アイデア?

だから、明確にするために、単にこれらの手順: 1.私は、ソースコード 3をダウンロードしていますhttp://www.apress.com/us/book/9781430265290 2に行きます私はせずにVS 2015年に第7章から 4.ソースコードの例を開封しております[MissingMethodException:このオブジェクトにパラメータのないコンストラクタが定義されていません。] .. [InvalidOperationException:タイプが 'SportsStore'のコントローラを作成しようとしたときにエラーが発生しました。 .WebUI.Controllers.ProductController '。コントローラは、パラメータなしのパブリックコンストラクタを持っていることを確認してください]

コントローラコードは単純です:。

public class NinjectDependencyResolver : IDependencyResolver 
{ 
    private IKernel kernel; 

    public NinjectDependencyResolver(IKernel kernelParam) 
    { 
     kernel = kernelParam; 
     AddBindings(); 
    } 

    public object GetService(Type serviceType) 
    { 
     return kernel.TryGet(serviceType); 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     return kernel.GetAll(serviceType); 
    } 

    private void AddBindings() 
    { 
     Mock<IProductRepository> mock = new Mock<IProductRepository>(); 

     mock.Setup(m => m.Products).Returns(new List<Product> 
     { 
      new Product {Name = "Football", Price = 25}, 
      new Product {Name = "Surf board", Price = 179}, 
      new Product {Name = "Running shoes", Price = 95} 
     }); 

     kernel.Bind<IProductRepository>().ToConstant(mock.Object); 
    } 
} 

そして:

public class ProductController : Controller 
{ 
    private IProductRepository repository; 

    public ProductController(IProductRepository repository) 
    { 
     this.repository = repository; 
    } 

    public ViewResult List() 
    { 
     return View(repository.Products); 
    } 
} 

次に、私は、コードに依存リゾルバの私の独自の実装を持っています最後に、NinjectWebCommonクラスでこのように使用します:

private static void RegisterServices(IKernel kernel) 
    { 
     System.Web.Mvc.DependencyResolver.SetResolver(new Infrastructure.NinjectDependencyResolver(kernel)); 
    } 
+0

コントローラのコードを掲載してください。 –

+0

@OwenPaulingなぜですか?とにかく、投稿に追加 – megohm

答えて

0

InvalidOperationException:タイプが 'SportsStore.WebUI.Controllers.ProductController'の コントローラを作成しようとしたときにエラーが発生しました。 コントローラは、パラメータなしのパブリックコンストラクタ

エラーメッセージが明確である持っていることを確認してください:あなたのコントローラはパラメータなしのコンストラクタを持っていない(あなたのコードで確認)。 IProductRepositoryが必要なので、これはもちろん意図的です。 Ninjectがこの依存関係を作成する方法を知るためには、IProductRepositoryのバインドを提供するだけで済みます。

+0

あなたは正しいです。私はポストにコードの残りの部分を追加しました。 RegisterServices()に設定されるべきバインディングがあります。問題は、どの段階でもRegisterServices()が実行されないことです。このメソッドにはブレークポイントがあり、アプリケーションを起動するときには到達しません。 – megohm

0

問題は解決されました。その理由は、あなたのプロジェクトのパスに気をつけないでください。

Ninject、Visual Studioなど、それを正しく解決できず、依存関係を読み込めないものがあります。