2012-04-11 9 views
0

Ninjectを使用してリポジトリをプロパティにバインドしようとしていますが、バインディングオブジェクトの参照が常にnullになります。以下のコードを使用して問題を説明します。プロパティにバインドすると常にnullが返される

public interface IServiceRepository 
    { 
     User GetUser(string email); 
     IQueryable<Statistic> GetStatisticForCurrentMonth(string ip); 
     void InsertStatistic(ConversionModel conversionModel); 

class ServiceRepository : IServiceRepository 
{ 
//Implementation of the Interface 
} 

私はクラスが作成されている間class belowbind the repository aboveしたいのです。残念ながらRepositoryオブジェクトは常にnullです。多分私はNinjectがどのように動作しているのか誤解していますか?どのように問題を解決するには?

public class Converter 
    { 
     [Inject] 
     public static IServiceRepository Repository { get; set; } 
     private static Converter _converter; 

     public static Converter Instance 
     { 
      get { return _Converter ?? (_Converter = new Converter()); 
     } 
} 

Ninject活性化コード

private static void RegisterServices(IKernel kernel) 
{ 
    kernel.Bind<IServiceRepository>().ToMethod(context => Converter.Repository); 
} 

私はこの

public class Converter 
    { 
     private readonly IServiceRepository _repository; 

     public Converter(IServiceRepository repository) 
     { 
      _repository = repository; 
     } 

//skip code 
} 

テストのようにコードを書き換えることを試みた

更新...

[TestMethod] 
    public void ConverterInstanceCreated() 
    {   
     using (IKernel kernel = new StandardKernel()) 
     {     
      kernel.Bind<IServiceRepository>().To<ServiceRepository>(); 
      Assert.IsNotNull(kernel.Get<Converter>()); 
     } 
    } 

は、私はちょうど失われた例外

Test method PC.Tests.NinjectTest.ConverterInstanceCreated threw exception: 
Ninject.ActivationException: Error activating IServiceRepository 
No matching bindings are available, and the type is not self-bindable. 
Activation path: 
    2) Injection of dependency IServiceRepository into parameter repository of constructor of type Converter 
    1) Request for Converter 

を与え、私はNinjectが任意の成功なしでおよそ一週間のために働いているかを理解しようとしています。私の場合、なぜこの例外がスローされますか?

また、シングルトンクラスに1つのリポジトリを注入して作業例を投稿してください。あなたがプロパティインジェクションを使用して、私はninjectはまだちょうどインタフェース

Iの避難所」にマッピングするために、具体的などのような種類を知る必要がありとして、それはまだ

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

だと思うの注射をコンストラクタされていなくても

答えて

2

Ninjectは統計情報を注入しません。 coynverterを静的でないクラスに変更し、それをSingletonとして構成します。コンストラクタインジェクションを使用して、repoをプライベートフィールドにします。

これで、コンバーターを必要な場所に挿入することができます。

+0

私はコードでポストを更新しましたが、まだ動作しません:( – Tomas

+0

無視してください、私は問題を解決しました – Tomas

+0

@Tomasあなたのコードはまだあなたはあなたの質問投稿にフォローアップすべき質問を削除するつもりです –

0

それが間違っている場合は、このことを謝ります。

+0

私はテストしてヌルを得る:( – Tomas

関連する問題