2016-04-19 12 views
2

問題を解決するために多くの検索を行いましたが、解決策はなく、DIとNinjectの新機能です。Ninject:ビジネスレイヤーでサービスを受けることができません

私の問題はWebUiレイヤでサービスを受けることができますが、私はビジネスレイヤでサービスを受けることができません。私は、ビジネス層にこのエラーが出ます

public IValidator<T> GetValidator<T>(T entity) 
{ 
    var d = kernel.Get<IValidator<T>>(); 
    return d; 
} 

エラー活性化IValidator {形}一致するバインディングがありません

私のWebUIでこのコード作業が、それは私のビジネス層で作業をdoesntの利用可能なのは で、そのタイプは自己バインドできません。アクティブ化パス:1) IValidatorのリクエスト

提案:1) IValidator {Type}のバインディングを定義していることを確認してください。 2)バインディングがモジュール内で定義されている場合は、モジュールがカーネルにロードされていることを確認してください。 3) が誤って複数のカーネルを作成していないことを確認してください。 4) コンストラクター引数を使用する場合は、パラメーター名が コンストラクターパラメーター名と一致することを確認します。 5)自動モジュール の読み込みを使用している場合は、検索パスとフィルターが正しいことを確認してください。

これは私のコードです:

マイインタフェース:

public interface IValidationService 
{ 
    ValidationState Validate<T>(T model); 
} 

私の具象クラス:

public class ValidationService : IValidationService 
{ 
    private readonly IKernel kernel; 
    public ValidationService(IKernel kernel) 
    { 
     this.kernel = kernel; 
    } 

    public ValidationState Validate<T>(T model) 
    { 
     var validator = kernel.Get<IValidator<T>>(); 
     if (validator == null) // or just return null? 
      throw new Exception(string.Format("No validator found for type     ({0})", model.GetType())); 

     return validator.Validate(model); 
    } 

} 

と私はバインディング:

kernel.Bind<IValidationService>().To<ValidationService>(); 
+0

[Asp.Net MVC&ウェブAPIを使用して設定Ninject]の可能な重複(http://stackoverflow.com/questions/16382982/configuring-ninject -with-asp-net-mvc-web-api) –

+0

は動作しません。 – Mashtani

+0

同じ 'Kernel'インスタンスを使用していますか?通常、AppDomainごとに1つのインスタンスしか持たないようにしてください。 – Steven

答えて

1

長年の検査の後、私は問題を持っています。

私はこれを行っていると私の問題がなくなっ:

kernel.Bind<IValidationService>().To<ValidationService>() 
      .WithConstructorArgument(typeof(IKernel)); 
関連する問題