2016-04-19 15 views
2

Ich suchte viel, um das Problem zu lösen, aber keine Lösung funktioniert und ich bin neu in DI und Ninject.Ninject: Getting Service funktioniert nicht in meiner Business-Schicht

Mein Problem ist, dass ich meinen Dienst in der WebUi-Schicht bekommen kann, aber ich kann meinen Dienst nicht in der Business-Schicht bekommen.

Dieser Code Arbeit in meinem WebUI aber es funktioniert nicht in meinem Business-Schicht:

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

ich diesen Fehler in Business-Schicht erhalten:

Fehler Aktivierung iValidator {Typ} keine passenden Bindungen sind verfügbar, und der Typ ist nicht selbstbindbar. Aktivierungspfad: 1) Anforderung für IValidator {Typ}

Vorschläge: 1) Stellen Sie sicher, dass Sie eine Bindung für IValidator {Type} definiert haben. 2) Wenn die Bindung in einem Modul definiert wurde, vergewissern Sie sich, dass das Modul in den Kernel geladen wurde. 3) Stellen Sie sicher, dass Sie nicht versehentlich mehr als einen Kernel erstellt haben. 4) Wenn Sie Konstruktorargumente verwenden, stellen Sie sicher, dass der Parametername dem Konstruktorparametername entspricht. 5) Wenn Sie das automatische Modul laden, stellen Sie sicher, dass der Suchpfad und die Filter korrekt sind.

Dies ist mein Code:

Meine Schnittstelle:

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

Meine konkrete Klasse:

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); 
    } 

} 

und meine Bindung:

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

Mögliche Duplikat [Konfigurieren von Ninject mit Asp.Net MVC und Web-Api] (http://stackoverflow.com/questions/16382982/configuring-ninject -mit-asp-net-mvc-web-api) –

+0

das funktioniert nicht. – Mashtani

+0

Sind Sie sicher, dass Sie dieselbe 'Kernel'-Instanz verwenden? Normalerweise sollte nur eine Instanz pro Anwendungsdomäne vorhanden sein. – Steven

Antwort

1

Nach einer langen Inspektionszeit bekam ich das Problem.

Ich habe dies getan, und mein Problem gegangen:

kernel.Bind<IValidationService>().To<ValidationService>() 
      .WithConstructorArgument(typeof(IKernel));