2011-01-12 3 views
7

手動でバインドする必要はありませんが、バインディングの自動設定にはどのようなメソッドとパターンが推奨されますか?例えばNInjectでバインディングを自動化するためのオプション

、バインディングの大半は、単に次のようになります。

Bind<ICustomerRepository>.To<CustomerRepository>(); 

モジュールが大型を取得したら、あなたはすべてがまったく同じに見えるバインディングの100Sで終わることができます。これは自動化できますか?

答えて

7

チェックアウト規則拡張を: https://github.com/ninject/ninject.extensions.conventions

 using (IKernel kernel = new StandardKernel()) 
     { 
      var scanner = new AssemblyScanner(); 
      scanner.From(Assembly.GetExecutingAssembly()); 
      scanner.BindWith<DefaultBindingGenerator>(); 
      kernel.Scan(scanner); 
      var instance = kernel.Get<IDefaultConvention>(); 

      instance.ShouldNotBeNull(); 
      instance.ShouldBeInstanceOf<DefaultConvention>(); 
     } 
+0

あなたはそれが何をしているのか、もう少し説明してもらえますか? – Jon

+1

このプロジェクトには、慣習に基づいてアセンブリをスキャンし、Ninjectでバインディングを作成するいくつかの異なるBindingGeneratorsがあります。この例で使用されるDefaultBindingGeneratorは、具体的なインスタンスと同じ名前に "I"を加えたインタフェースを探します。たとえば、上記のIDefaultConventionはDefaultConventionにバインドされています。バインディングのルールを指定する場合はRegexBindingGenerator、型への汎用引数を自動的に満たすためのGenericBindingGeneratorもあります。 –

関連する問題