私が持っている静的ヘルパークラス.NETのコアIHttpContextAccessorの問題
public static class Current
{
public static string Host
{
get { return "httpContextAccessor here"; }
}
}
?
私が持っている静的ヘルパークラス.NETのコアIHttpContextAccessorの問題
public static class Current
{
public static string Host
{
get { return "httpContextAccessor here"; }
}
}
?
あなたはそうすることはできません。これは、依存性注入システムをまったく持っていないという全目的に勝つものです。静的クラス(ランタイムデータまたはサービスロケータ用)は、パターンに反します。
ASP.NETコアでは、必要なクラスにIHttpContextAccessor
を注入する必要があります。あなたは非静的クラスを作成し、の線に沿って何かを行うことができます:
public class RequestInformation : IRequestInformation
{
private readonly HttpContext context;
public RequestInformation(IHttpContextAccessor contextAccessor)
{
// Don't forget null checks
this.context = contextAccessor.HttpContext;
}
public string Host
{
get { return this.context./*Do whatever you need here*/; }
}
}
とあなたのクラスライブラリの
はそれを注入:public class SomeClassInClassLibrary
{
private readonly IRequestInformation requestInfo;
public SomeClassInClassLibrary(IRequestInfomation requestInfo)
{
// Don't forget null checks
this.requestInfo = requestInfo;
// access it
var host = requestInfo.Host;
}
}
は、あなたのSomeClassInClassLibrary
がScoped
かのいずれかで解決しなければならないことに注意してくださいHttpContext
は要求の期間中のみ有効であるため、Transient
モードであり、Singleton
にはなりません。
また、SomeClassInClassLibrary
をシングルトンにする必要がある場合は、工場出荷時にオンデマンドで(すなわちアクション内で)IRequestInformation
を解決する必要があります。
最後に、IHttpContextAccessor
は既定では登録されていません。
IHttpContextAccessorを使用して、現在のスレッドのHttpContextにアクセスできます。しかし、この状態を維持することは、パフォーマンス上のコストを削減するので、デフォルトのサービスセットから削除されています。必要に応じてそれを再度追加することができますに依存
開発者:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
出典:The IHttpContextAccessor service is not registered by default
ノートのHttpContextは、ASP.NETのコアではなく、.NETのコアの一部であること。 –