3

私は当初、特定の「サービスインターフェイス」、および私の例ではServiceStack.ServiceInterface.Serviceから継承するものがリクエストごとに再作成されると考えていました。私は最近、依存関係(および一般的なメンバー)が内部状態を保持しているため、おそらくそうではないことを発見しました。私は、誰かが私に期待される振る舞いについて正しい方向を示し、なぜそれがこのように振る舞うのかを教えてくれるかどうかを望んでいました。私は主に2つのシナリオに興味があります。1つはIISホスティング用で、もう1つはVSホスティング/デバッグ用です。

4

1 に答える 1

2

ServiceStackのサービスは、他の IOC 依存関係と同様に登録され、自動配線されます。Service の新しいインスタンスが作成されるたびに、その依存関係が自動配線されます。

サービスが既存のインスタンスで自動配線されるかどうかは、依存関係がどのように登録されているかによって異なります。たとえば、組み込みの Funq IOCを使用する場合です。

デフォルトでは、依存関係はシングルトン スコープで登録されます。つまり、毎回同じインスタンスが注入されます。

container.Register<IFoo>(c => new Foo());  
container.Register<IFoo>(c => new Foo()).ReusedWithin(ReuseScope.Container);  

RequestScope を指定して、新しいインスタンスが作成され、リクエストごとに挿入されるようにすることもできます。

container.Register<IFoo>(c => new Foo()).ReusedWithin(ReuseScope.Request);  

最後に、毎回新しいインスタンスが作成され、注入される一時的なスコープがあります。

container.Register<IFoo>(c => new Foo()).ReusedWithin(ReuseScope.None);  

サービスの新しいインスタンスを要約すると、実際にはリクエストごとに作成されますが、新しいインスタンスを取得するかどうかは、依存関係の登録スコープによって異なります。

public class MyService : Service { 
    public IFoo Foo { get; set; }  // auto-wired using above registration rules
}
于 2012-12-13T18:42:03.847 に答える