Web サーバーで実行しているかどうかを確認するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/744991

質問

C# .NET モジュールを作成していて、プロバイダー パターンを使用したいと考えています。

コードが Web サーバー上で実行されている場合、次のアクセス権があります。 System.Web.Configuration そして電話することができます ProvidersHelper によって決定された適切なプロバイダーをロードします。 web.config データ。

コードがスタンドアロン環境で実行されている場合、このクラスにはアクセスできません。

リフレクションを使用して、(a) 組み込みのクラスに到達できるかどうかを判断するラッパー クラスを作成できるように思えます。 System.Web.Configuration.ProvidersHelper, そうでない場合は、(b) スタンドアロン モードで使用できるリソースのみに依存する、機能的に同等のインターフェイスを提供します。

以前にこの問題に遭遇した人や提案を持っている人はいますか?

役に立ちましたか?

解決

の参照を避けたい場合は、 System.Web アセンブリを作成するには、関心のある情報を公開するインターフェイスを作成し、必要に応じてコンシューマーにこのインターフェイスの実装者を提供してもらう必要があります。

// Core assembly, doesn't reference System.Web
public class ThisUsesProviders {
    public ThisUsesProviders(IProviderProvider pp) { ... }
}

public interface IProviderProvider {
   SpecialProvider InstantiateSpecialProvider(/* custom arguments */);
}

// Helper assembly, references System.Web
public class DefaultProviderProvider : IProviderProvider
{
    SpecialProvider InstantiateSpecialProvider(/* custom arguments */)
    {
        // call ProvidersHelper 
    }
}

// standalone consumer:
var thing = new ThisUsesProvider(new NonStandardProvider());

// ASP.NET:
var thing = new ThisUsesProvider(new DefaultProviderProvider());

このパターンはと呼ばれます 依存関係の注入 そして 制御の反転.

他のヒント

HttpContext.Currentがnullでないかどうかを確認します:

if(HttpContext.Current!=null)
   // I'm running on a web server

あなたは状況を作成することができHttpContext.Currentがnullであるかどうかを返すWeb機能です。

それがnullではない場合、あなたはそれがnullだ場合、あなたがない、ウェブサイトを持っています。

Web ベースまたは非 Web ベースのアプリケーションからアクセスできるモジュールを作成している場合、構成を処理する正しい方法は、クライアント コードを使用することです。 教えて あなたがどんな環境にいるのか。これはクライアント コードに多少の負担をかけるだけで、コードの複雑さが大幅に軽減されます。考えられる解決策の 1 つは、同じインターフェイスに準拠するオブジェクトをクライアントに渡すことです (ただし、MSDN ドキュメントをざっと見たところ、ProvidersHelper 用に定義されたインターフェイスがないことがわかります。そのため、簡単な方法はありません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top