2016-07-15 8 views
0

Ich möchte eine Instanz einer Route in der Startkonfiguration meiner App verwenden, indem ich den DI-Container verwende und die Instanz nicht fest codiere, gibt es eine Möglichkeit, das zu tun?Den DI-Container in dotnetcore holen

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 
    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
     app.UseBrowserLink(); 
    } 
    else 
    { 
     app.UseExceptionHandler("/Home/Error"); 
    } 
    app.UseStaticFiles(); 
    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      "default", 
      "{controller=Home}/{action=Index}/{id?}"); 
     // hardcoded dependeny, I'd like to do something like this 
     // var instance = container.getInstance<LandingPageRouter>(); 
     routes.Routes.Add(new LandingPageRouter(routes, new MyWebRequest())); 
    }); 
} 

Antwort

1

Haben Sie versucht app.ApplicationServices.GetRequiredService<LandingPageRouter>()?

Wenn das nicht funktioniert, bedeutet dies, dass der Controller noch kein registrierter Dienst ist.

+0

Danke für die Hilfe, aber ich bekomme diese Ausnahme: "Kein Service für den Typ 'Main.Config.LandingPageRouter' wurde registriert." –

+0

Ich bin mir nicht sicher, ob ich das verstehe. Wenn es sich nicht im DI-Container befindet, bedeutet dies, dass es nicht als Dienst registriert ist. Sie können versuchen, 'services.AddScoped ();' davor in der 'ConfigureServices'-Methode Ihrer Startup-Klasse auszuführen. –

+0

Eigentlich habe ich vergessen, es zur Registrierungszeit hinzuzufügen, also habe ich es mit addTransient registriert, können Sie den Unterschied zwischen AddScoped erklären? –

Verwandte Themen