2016-05-22 25 views
45

私はasp.netコアRC1プロジェクトをRC2に変換し始めましたが、今はIHttpContextAccessorが解決しないという問題に直面しました。InvalidOperationException:タイプ 'Microsoft.AspNetCore.Http.IHttpContextAccessor'のサービスを解決できません

わかりやすくするために、Visual StudioテンプレートASP.NET Core Web Application (.Net Framework)を使用して新しいASP.NET RC2プロジェクトを作成しました。 HomeControllerのテンプレートを作成してくれました。

public HomeController(IHttpContextAccessor accessor) 
{ 
} 

そして、私は次のエラー受け取る私がアプリケーションを起動した後:私の実際のアプリケーションでは

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' while attempting to activate 'TestNewCore.Controllers.HomeController'. в Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)

を私は_contextAccessor.HttpContext.Authenticationにして_contextAccessor.HttpContext.Userへのアクセスを取得するために私自身のサービス・クラスでIHttpContextAccessorを解決する必要があります。 EverethingはRC1で正常に動作します。だからRC2にどうやっていると思う? IHttpContextAccessorはもはやデフォルトでアップ配線され

答えて

79

、あなたは正しくシングルトンとしてIHttpContextAccessorを登録するために追加された拡張メソッドがある.NETコア2.1の時点では自分で

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
+5

それが働いている:

services.AddHttpContextAccessor(); 

これは同等です。 'services.AddScoped () 'と同じ話 – YuriyP

+2

適切なスコープが公式に推奨されていますか?それは 'Singleton'、' Scoped'、または 'Transient'でしょうか? –

+5

これはここで議論され、複数の人が安全に「シングルトン」になることができることを確認します。 https://github.com/aspnet/Hosting/issues/793 –

3

それを登録する必要がありません。 Add helper to register IHttpContextAccessor #947を参照してください。次のように単にあなたのConfigureServices()方法で追加します:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
関連する問題