2016-07-15 11 views
0

DIコンテナを使用し、インスタンスをハードコードしないで私のアプリケーションのスタートアップコンフィギュレーションでルートのインスタンスを取得したいのですが、その方法はありますか?dotnetcoreでDIコンテナを取得する

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

答えて

1

app.ApplicationServices.GetRequiredService<LandingPageRouter>()を試しましたか?

これが機能しない場合は、コントローラーが登録済みのサービスではないことを意味します。

+0

ありがとうございましたが、この例外が発生しています: "タイプ 'Main.Config.LandingPageRouter'のサービスが登録されていません。 –

+0

わかりません。 DIコンテナにない場合は、サービスとして登録されていないことを意味します。スタートアップクラスの 'ConfigureServices'メソッドの中で' services.AddScoped (); 'を試すことができます。 –

+0

実際、登録時に追加するのを忘れてしまったので、addTransientに登録しました.AddScopedの違いを説明できますか? –

関連する問題