Web の現在の http コンテキストをサービス クラスに渡す (またはそれへの参照を使用してクラスを初期化する) 方法を考え出そうとしています。これを行っているのは、アプリの残りの部分を、http コンテキストについて何も知る必要がないように抽象化するためです。
また、おそらく Mockable フレームワークの 1 つを使用して、TDD を使用してサービスをテストできるようにしたいと考えています。したがって、実際のクラスではなくインターフェイスを使用することをお勧めします。
私が達成したいことの例:
class WebInstanceService
{
private IHttpContext _Context;
public WebInstanceService( ... , IHttpContext HttpContext )
{
....
_Context = HttpContext;
}
// Methods...
public string GetInstanceVariable(string VariableName)
{
return _Context.Current.Session[VariableName];
}
}
私が抱えている主な問題の 1 つは、IHttpContext がないことです。.net http コンテキストは、(簡単に?) モックできない抽象クラスのサブクラスです。
もう 1 つの問題は、クラスのグローバル インスタンスを初期化できないことです。これは、コンテキストがほとんどの要求に関連しないためです。
クラスを静的にし、コンテキストが呼び出されるたびに各関数に渡されるようにすることができます。
public static string GetInstanceVariable(string VariableName, HttpContext Context)
{ ... }
しかし、これによってクラスのテストが容易になるわけではありません。HttpContext を作成する必要があります。さらに、このクラスを使用したい非 Web 対応サービスは、突然 Context を取得できる必要があり、密接に結合する必要があります。 Web サーバーへ - そもそもこのクラスを作成したい理由のすべてです。
私はすべての提案にオープンです - 特に人々が簡単な tdd テストを容易にすることを知っている提案です。この問題にどのように取り組むことを人々は提案しますか?
乾杯