MVC5 und Ninject:Parameterlosen Konstruktor Fehler

In MVC 5 wir erhalten dieses Konto controller, der wie folgt aussieht.

public class AccountController : Controller
        {

            public AccountController()
                : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new DatePickerDbContext())))
            {

            }

            public AccountController(UserManager<ApplicationUser> userManager)
            {
                UserManager = userManager;
            }
        }

Habe ich installiert, Ninject mit meinem dependency injection. Ich habe zwei repositories, die ich verwenden möchte in meinem AccountController
und der code sieht nun wie folgt aus

    public class AccountController : Controller
    {
              private readonly ILicenserepository _licenserepository;
              private readonly IUserRepository _userRepository;    

        public AccountController(ILicenserepository licenserepository, IUserRepository userRepository)
            : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new DatePickerDbContext())))
        {
            _licenserepository = licenserepository;
            _userRepository = userRepository;
        }

        public AccountController(UserManager<ApplicationUser> userManager)
        {
            UserManager = userManager;
        }
    }

in ninject.web.gemeinsames dies ist, was ich getan habe,

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind(typeof (ILicenserepository)).To(typeof (Licenserepository));
    kernel.Bind(typeof (IUserRepository)).To(typeof (UserRepository));
}    

aber wenn ich die Anwendung ausführen bekomme ich die Fehlermeldung, die auf browser -, die Nein sagt parametereless Konstruktor gefunden. Und wenn ich parameter weniger Konstruktor meine repositories nicht instanziiert werden. So, wo ich die Methode aufgerufen hat, aus dem repository der Wert null ist.
Wie kann ich dieses problem lösen? Oder machen Sie MVC oder Ninject wissen, mit welchem Konstruktor aufrufen?

  • Ich habe nicht eine konkrete Lösung, auf die Spitze von meinem Kopf, aber Sie brauchen, um den code zu ersetzen, das schafft der Controller bei der Verwendung von dependency-injection JEGLICHER Art. In der Regel haben Sie die Implementierung eigener (einfacher) controller factory das injizieren der Abhängigkeiten, die Sie brauchen. Die Standard-Factory, benötigen weniger parameter von Konstruktoren können Sie auch verlängern, von DefaultControllerFactory(siehe msdn: msdn.microsoft.com/en-us/library/...) und lösen dort Abhängigkeiten. Dann registrieren Sie Ihr neues Werk auf die MVC5
  • Sie können festlegen, dass die neuen controller via ControllerBuilder.SetControllerFactory (Link: msdn.microsoft.com/en-us/library/...). Hoffe es hilft
  • Und fwiw: erstellen Sie nicht UserManager innerhalb des Konstruktors, das macht die Klasse nicht UnitTest-in der Lage. Implementieren UserManager als Schnittstelle und pass IUserManager als nur in Abhängigkeit von der Klasse und lösen es über Ihre DI-framework
InformationsquelleAutor Cybercop | 2014-01-23
Schreibe einen Kommentar