我正在使用Microsoft Orleans,並且我有一個名爲ConsumerGrain的穀物,它與訂閱ID的Azure訂閱相關聯。爲了符合SOLID原則,穀物被注入了多個應用服務。一些應用程序服務需要訂閱的ID。我不想在每個方法調用上傳遞訂閱ID,而是希望將ISubscriptionContext對象注入到每個需要當前訂閱ID的應用程序服務中,並且我希望每個grain的對象圖創建一次服務實例,所以它不可能是瞬態的而不是單身生活方式。這裏可以使用Scoped的生活方式嗎?如何配置Orleans DI容器來解析每個粒子對象圖具有相同實例的服務?
1
A
回答
0
奧爾良公司使用類返回的IServiceProvider
只爲穀物解決。這意味着應用程序所用的Startup
類與以下邏輯返回一個複合的IServiceProvider:
- 生成基於由新奧爾良提供的
IServiceCollection
一個IServiceProvider
,用於解析奧爾良內部晶粒。 - 爲應用程序的穀物構建一個
IServiceProvider
&服務,比方說使用SimpleInjector和每個對象圖的生活方式。 - 返回
IServiceProvider
,首先嚐試使用基於奧爾良的IServiceProvider
進行解析,並且如果使用基於IServiceProvider
的應用程序失敗解決。
的Startup
類只是需要有一個方法,在它匹配此簽名:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
return services.BuildServiceProvider();
}
是這個片段BuildServiceProvider()
由Microsoft.Extensions.DependencyInjection
0
有更詳細的解釋at:
http://www.codeproject.com/Articles/1099750/How-to-implement-DI-support-in-your-Orleans-Silo
知道必須在orleans的配置文件中設置Startup Class很重要。
<?xml version="1.0" encoding="utf-8"?>
<OrleansConfiguration xmlns="urn:orleans">
<Globals>
<SeedNode Address="localhost" Port="10000" />
</Globals>
<Defaults>
<Startup Type="Grains.Startup, Grains" /><!--important-->
<Networking Address="localhost" Port="10000" />
<ProxyingGateway Address="localhost" Port="30000" />
</Defaults>
</OrleansConfiguration>
相關問題
- 1. 如何創建兩個配置相同服務的實例?
- 2. 匹配2具有相同實例名稱的不同對象
- 3. 具有相同對象的WCF服務
- 4. SolrNet具有多個solr實例配置/實例與Windsor容器
- 5. 使用Castle Windsor子容器來解析具有特定實例的類型
- 6. 解析服務器在mongodb中創建相同的對象
- 7. 2個具有相同基礎對象的不同服務
- 8. SF2:配置一個服務,每次都給出一個新的對象實例
- 9. DI容器:如何將配置傳遞給對象
- 10. 使用獲取/設置粒子來實例化粒子系統
- 11. 使用具有相同基類的不同對象實例設置對象基礎的實例
- 12. 使用.NET Core的DI容器實例化對象
- 13. 具有簡單服務對象的服務容器
- 14. 解析服務器,例如有問題
- 15. OSGI兩個相同服務的實例
- 16. 兩個具有不同合同但業務對象相同的WCF服務
- 17. 如何解析來自android中的web服務的主數組中具有相同名稱的json子數組?
- 18. 吉斯:創建具有不同配置的多個對象實例
- 19. 實例化多個相同的對象
- 20. 具有相同服務的多個服務器
- 21. 如何運行多個實例具有不同配置值的相同jijster war文件的相同角色
- 22. 硒:ChromeDriver具有相同的配置文件打開兩個不同的實例
- 23. 調試具有不同配置的相同項目的2+個實例
- 24. 如何爲每個節點部署相同服務類型的多個實例?
- 25. IOC/DI CastleWindsor每次都會返回相同的實例
- 26. 爲什麼Spring.Net在解析配置時實例化對象?
- 27. 具有不同定時器的相同視圖的多個實例
- 28. 相同的webdriver,多個實例,每個都有自己的配置文件
- 29. GSON對象由對象解析爲具有不同名稱的每次
- 30. DI統一解析容器錯誤
有趣的問題。我沒有看到奧爾良的任何主要IoC庫集成包。一般來說,IoC容器有兩種解決此類情況的方法:像Autofac中手動的BeginLifetimeScope,或將範圍與圖形中的對象相關聯,如Castle.Winsdor中的LifeStyle.BoundTo,Autofac中的PerOwned。 – dadhi
在Unity DI中,有一個像「每個解決生命期管理器」的東西。由於奧爾良使用的ASP.NET核心DI是一個所謂的[符合容器](https://simpleinjector.org/blog/2016/06/whats-wrong-with-the-asp-net-core-di-abstraction /)沒有這種類型的依賴關係解析。一種解決方案可能是爲每個穀物實例打開一個作用域,並將依賴關係註冊爲作用域單例。但是這個範圍應該由奧爾良基礎設施在穀物實例化時打開。因此,當糧食停用時,範圍應該是封閉的。 –