我有C#應用程序,我在Windsor容器中註冊了幾十個接口及其實現類。所有這些實現類都由Windsor單獨解析。問題是我能以某種方式讓Windsor手動解決所有這些問題並將它們連接起來以創建一個對象圖?我不需要懶惰地解決Windsor在某些組件被請求時會默認執行的操作,我需要一次性解決它們,以便進行一些調試和測試。理想情況下,我想爲所有註冊類型獲取實例數組。這可能嗎?有沒有辦法急於解決所有使用Windsor IoC容器註冊的組件?
1
A
回答
0
通常用於調試和測試容器,您可以使用component handler而不是解析組件本身。
說的是,西蒙是對的:當你解析一個組件時,windsor會創建真實的實例及其所有的依賴關係。除非您的意思是通過(打字)工廠實現「延遲依賴」,否則什麼都不是「延遲」,但是這很讓人滿意......
1
依賴關係圖可通過GraphNodes
屬性獲得。這裏有一個簡單的例子:
[Test]
public void Get1()
{
var container = new WindsorContainer();
container.Register(Component.For<SomeClass>().LifestyleSingleton());
container.Register(Component.For<Dependency>().LifestyleSingleton());
var graphNodes = container.Kernel.GraphNodes;
Assert.That(graphNodes.Length, Is.EqualTo(2));
Assert.That(graphNodes[0].Dependents[0].ToString(), Is.EqualTo(typeof(Dependency).Name));
Assert.That(graphNodes[1].Dependents.Length, Is.EqualTo(0));
}
你應該能夠輕鬆地確定哪些類型是「根」類型過濾掉那些依賴任何類型的...
UPDATE
從GraphNode
創建實例的方法之一是將GraphNode
投射到Castle.Core.ComponentModel
[Test]
public void Resolve1()
{
var container = new WindsorContainer();
container.Register(Component.For<SomeClass>().LifestyleSingleton());
container.Register(Component.For<Dependency>().LifestyleSingleton());
var graphNodes = container.Kernel.GraphNodes;
var name = (graphNodes[0] as ComponentModel).ComponentName.ToString();
var type = Type.GetType(name);
dynamic instance1 = container.Resolve(type);
Assert.That(instance1, Is.Not.Null);
}
相關問題
- 1. 列出容器中的所有註冊組件,Windsor?
- 2. 有沒有辦法讓所有註冊的消息轉換器?
- 3. 有沒有辦法將動作註冊到DI容器(Autofac)?
- 4. IoC容器 - 註冊實例組件
- 5. 在使用Castle Windsor IoC容器註冊組件時設置Name屬性
- 6. Castle Windsor:有沒有辦法重寫組件ID?
- 7. 這背後IOC行爲推理(有多個已註冊的組件解決)
- 8. 使用COM組件沒有註冊表
- 9. 有沒有辦法註冊一個屬性取決於另一個?
- 10. 註冊IOC容器自
- 11. 城堡未解決所有註冊組件
- 12. Castle Windsor:主控制器無法解析容器中的註冊組件
- 13. WCF Windsor容器註冊
- 14. 有沒有辦法讓ASP.NET 5依賴注入解決沒有參考的DbContext?
- 15. 有沒有辦法在angular2中使用基於bootstrap的組件?
- 16. 將InterceptionBehaviour添加到在IoC容器中註冊的所有內容
- 17. 使用Fluent界面在Castle Windsor註冊所有的課程
- 18. 使用IoC容器時,您在哪裏註冊組件?
- 19. Windsor OnCreated for所有組件
- 20. 適用於所有類型的通用Autofac容器註冊
- 21. 有沒有辦法解決python mayavi錯誤,如下所述?
- 22. 有沒有辦法找出Windows註冊的所有快捷方式?
- 23. 有沒有辦法使用Notepad ++刪除文件中的所有註釋?
- 24. 有沒有辦法在JS中註冊警報事件?
- 25. 使用SpriteKit崩潰Xcode 8,有沒有辦法解決?
- 26. 有沒有辦法在Wordpress中完全禁用用戶註冊?
- 27. 有沒有更好的方法將Castle Windsor的API用於工廠?
- 28. 所有帽子文字。有沒有辦法正確解決CAPITALIZED用戶輸入?
- 29. 反射vs參考 - IoC容器註冊
- 30. 有沒有辦法在Three20中用查詢參數註冊url?
AFAIK它們不會被延遲......圖形是根據容器的第一個請求構建的(大多數容器都是這樣的,我很確定)。我不確定我是否通過「所有註冊類型的實例數組」獲得了您的意思。你能詳細說明嗎? –
因此,我需要的是要求Windsor容器解析所有註冊的接口,而不是在需要時發生的懶惰解析(例如,在WebAPI應用程序收到HTTP請求時發生的項目中)。如果可能的話,我想以某種方式獲得所有已解決和實例化的對象的列表(或數組),當我明確要求Windsor進行解析時。 – matori82