2012-12-13 72 views
3

我原本以爲每個請求都會重新創建一個特定的「服務接口」,在我的示例中,它是從ServiceStack.ServiceInterface.Service繼承的。最近我發現可能情況並非如此,因爲依賴關係(以及一般成員)保持內部狀態。我只是希望有人能夠指出我對預期行爲的正確方向,以及爲什麼這樣做。我主要對兩種情況感興趣,一種用於IIS託管,另一種用於VS託管/調試。多個請求的服務持久性

回答

2

ServiceStack中的服務已註冊並自動裝配,與其他IOC依賴項相同。每個請求都會創建一個服務的新實例並自動裝配它的依賴關係。

是否將服務自動裝配與現有的情況下,或不依賴於依賴是如何註冊,例如,如果你使用built-in 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 
}