2017-03-28 1 views
0

Ich habe ein C# -Projekt, das sowohl WebAPI- als auch MVC-Controller enthält, mit denen ich Simple Injector verwenden möchte. Die einfache Injector Dokumentation bei https://simpleinjector.readthedocs.io/en/latest/mvcintegration.html zeigt die Application_Start Methode für MVC alsEinfacher Injektor mit MVC und WebAPI

protected void Application_Start(object sender, EventArgs e) { 
    // Create the container as usual. 
    var container = new Container(); 
    container.Options.DefaultScopedLifestyle = new WebRequestLifestyle(); 

    // Register your types, for instance: 
    container.Register<IUserRepository, SqlUserRepository>(Lifestyle.Scoped); 

    // This is an extension method from the integration package. 
    container.RegisterMvcControllers(Assembly.GetExecutingAssembly()); 

    container.Verify(); 

    DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container)); 
} 

aber https://simpleinjector.readthedocs.io/en/latest/webapiintegration.html die für WebAPI

protected void Application_Start() { 
    // Create the container as usual. 
    var container = new Container(); 
    container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle(); 

    // Register your types, for instance using the scoped lifestyle: 
    container.Register<IUserRepository, SqlUserRepository>(Lifestyle.Scoped); 

    // This is an extension method from the integration package. 
    container.RegisterWebApiControllers(GlobalConfiguration.Configuration); 

    container.Verify(); 

    GlobalConfiguration.Configuration.DependencyResolver = 
    new SimpleInjectorWebApiDependencyResolver(container); 

    // Here your usual Web API configuration stuff. 
} 

folgende zeigt, wie kann ich Code Application_Start bitte so kann ich einfach Injector in WebAPI und MVC verwenden Controller?

Antwort

2

Sie einfach den Code zusammen so sagen könnte:

protected void Application_Start(object sender, EventArgs e) { 
    var container = new Container(); 
    container.Options.DefaultScopedLifestyle = new WebRequestLifestyle(); 

    container.Register<IUserRepository, SqlUserRepository>(Lifestyle.Scoped); 

    // User MVC integration 
    container.RegisterMvcControllers(Assembly.GetExecutingAssembly()); 

    // Use Web API integration 
    container.RegisterWebApiControllers(GlobalConfiguration.Configuration); 

    container.Verify(); 

    // Plug in Simple Injector into MVC 
    DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container)); 

    // Plug in Simple Injector into Web API 
    GlobalConfiguration.Configuration.DependencyResolver = 
     new SimpleInjectorWebApiDependencyResolver(container); 
} 
+0

Das gibt 'System.InvalidOperationException durch Benutzercode Nachricht unhandled war = Die Konfiguration ist ungültig. Das Erstellen der Instanz für den Typ HelpController ist fehlgeschlagen. Damit der Container HelpController erstellen kann, sollte er nur einen öffentlichen Konstruktor haben: Er hat 2. Siehe https://simpleinjector.org/one-constructor für weitere Informationen. Ich habe eigentlich keinen HelpController in meinem Projekt !?! – Caltor

+0

@Caltor Ja, Sie haben irgendwo in Ihrer Anwendung einen HelpController. Such einfach im Projekt. Es kann für Sie von der verwendeten VS-Vorlage erzeugt werden. – Steven

+0

Nun gut gut ... sieh dir das an! So ich mache. Es ist in Bereichen/HelpPage. Ich habe die Hilfeseiten vergessen, die VS automatisch für WebAPI erstellt. Dank dafür. Es ist traurig, dass du mehr über mein Projekt weißt als ich. – Caltor

Verwandte Themen