2016-07-23 11 views
1

私のリポジトリをWindowsフォームに挿入するためにNinjectを使用しています。ninjectを使用してwinformエラーへのリポジトリを挿入する

だから私はnuget .Iからninjectインストール私の窓のフォームにこれを追加します。私のフォームで

public class Binding: NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<IUserRepository>().To<IUserRepository>(); 
     } 
    } 

を私はこれを行う:

public partial class Form1 : Form 
    { 
     private IUserRepository userRepository; 
     [Inject] 

     public Form1() 
     { 
      InitializeComponent(); 
      var kernel = new StandardKernel(); 
      kernel.Load(Assembly.GetExecutingAssembly()); 
      userRepository = kernel.Get<IUserRepository>(); 

     } 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      List<User> saaa = userRepository.Get().ToList(); 
      int aaa = saaa.Count; 
     } 
    } 

しかし、私はこのエラーを取得:

An unhandled exception of type 'Ninject.ActivationException' occurred in Ninject.dll 

Additional information: Error activating IUserRepository using binding from IUserRepository to IUserRepository 

No constructor was available to create an instance of the implementation type. 



Activation path: 

    1) Request for IUserRepository 



Suggestions: 

    1) Ensure that the implementation type has a public constructor. 

    2) If you have implemented the Singleton pattern, use a binding with InSingletonScope() instead. 

答えて

2
Bind<IUserRepository>().To<IUserRepository>(); 

この行は、プロの少なくとも一部です傷。あなたはNinject何を具体の実装IUserRepositoryの実装を教えていません。

このエラーメッセージで、実際に権利があります(強調鉱山)

追加情報:IUserRepositoryからバインディングを使用IUserRepository活性化のエラー、あなたが作成することはできませんのでIUserRepository

へインターフェイスのインスタンスでは、少なくともIUserRepository(たとえばUserRepository)の実装を1つ持ち、それをインターフェイスにバインドする必要があります。

Bind<IUserRepository>().To<UserRepository>(); 

あなたが何かを注入していないので、また、[Inject]属性は、この場合では無意味である - あなたは、コンテナから直接自分の依存関係を作成している(OKである、あなたが適切な注入を持つことができるものの、hereを参照してくださいいくつかのアイデアのためにも、Ninjectのために働くでしょう)

+0

スティーブンは私の問題だったありがとうございました –

+0

良いもの;私はまた、読んでみる価値のあるリンクを使って答えを更新しました。フォームのコンストラクタでIUserRepositoryを宣言できる適切な注入が可能になります。 –

+0

ありがとう、 –

関連する問題