我想構建一個控制檯應用程序,它在運行時加載一個程序集,並實現一個接口。重點是創建一個.dll,其中包含可以通過更改.dll進行更改的指令。StructureMap:'AddAllTypesOf'不向ObjectFactory添加程序集?
我的VS2012解決方案存在3個項目:接口,實現它的庫和控制檯應用程序。 (正因爲如此,所有三個都有自己的命名空間,也許這是一個問題?)庫和控制檯應用程序都有對接口項目的引用。
在將程序集添加到ObjectFactory
後,在使用GetAllInstances
時未找到它們。當使用AssembliesFromPath
時會發現它們,但添加似乎不起作用。
這裏是我的代碼:
var dir = "..\\..\\..\\ComputeLibrary\\bin\\Debug";
ObjectFactory.Initialize(cfg =>
{
cfg.Scan(scanner =>
{
scanner.AssembliesFromPath(dir);
scanner.AddAllTypesOf(typeof(ICompute)).NameBy(i => i.Name);
});
});
var list = ObjectFactory.GetAllInstances<ICompute>().ToList();
list.ForEach(item => item.Test());
如果有人想看看整個解決方案,它可here。
我可能在這裏做錯了什麼,但我似乎無法找到它是什麼。 這是應該如何使用它?還是我應該看看MEF做這樣的事情?
根據文檔,您的代碼看起來與期望的一致。你已經在調試器中用一個斷點運行了這個,並且在'scanner.AssembliesFromPath(dir);'行執行後驗證了掃描器實例是否具有預期的程序集? – cfeduke 2013-03-07 12:59:58
是的,運行該行後,掃描儀包含2個組件:界面和庫,而在此之前,有0. [屏幕截圖](http://i.imgur.com/Z0znR0Y.png) – Yves 2013-03-07 13:06:22
如果你消除'.NameBy'?我想知道是否有可能導致吞嚥異常,導致無法將類添加到掃描儀中。 – cfeduke 2013-03-07 14:38:37