あなたはこれを考えすぎています。ServiceStackの AService
は、すべてのリクエストで開始され、入力される単純な C# インスタンスです。
デフォルトでは、組み込みの Funq はすべてをシングルトンとして登録するため、インスタンスを登録すると、次のようになります。
container.Register(new GlobalState());
サービスでそれを参照します。
public class HelloWorldService: Service
{
public GlobalState GlobalState { get; set; }
public string Get(HelloWorld request)
{
return GlobalState.SomeOtherClassInstance;
}
}
舞台裏では常に同じインスタンスを注入しています。Funq では、文字通りインメモリからインスタンスを取得しているだけなので、これは非常に高速Dictionary
です。
ただし、何らかの理由でサービスとしてのアプローチが気に入らない場合は、まだ C# クラスであるため、静的プロパティを使用できます。
public class HelloWorldService: Service
{
public static GlobalState GlobalState = new GlobalState { ... };
public string Get(HelloWorld request)
{
return GlobalState.SomeOtherClassInstance;
}
}
またはシングルトン:
public class HelloWorldService: Service
{
public string Get(HelloWorld request)
{
return GlobalState.Instance.SomeOtherClassInstance;
}
}
または、他の方法でそれをやりたいです。IOC を使用することをお勧めします。IOC の方がテストしやすく、他のすべての依存関係が登録されている方法と一貫性があるためです。使用しない正当な理由はありません。