我試圖完成的基本想法是配置我的Silverlight應用程序以在運行時解析其依賴關係(無需在項目中添加對依賴DLL的引用)。使用Prism和Unity在Silverlight中動態加載模塊
我有我的UI項目引用的基礎結構項目比包含各種接口(例如存儲庫)。這些接口的具體實現存儲在我想要下載並鏈接到運行時的單獨SL應用程序中。我希望能夠從外部配置文件配置我的UI應用程序,這樣我就可以在運行時從一種接口實現切換到另一種接口實現,而無需重新編譯應用程序。
我到目前爲止所做的是爲每個實現(在一個單獨的SL應用程序中)創建一個Prism模塊,並讓這些XAP託管在我的Web項目中。在我的UI程序,我創建了具有這樣的boostraper:
protected override IModuleCatalog CreateModuleCatalog()
{
var mc = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("/UI;component/Repositories/ModulesCatalog.xaml", UriKind.Relative));
return mc;
}
ModulesCatalog.xaml看起來是這樣的:
<Modularity:ModuleCatalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism">
<Modularity:ModuleInfo Ref="ImplementationOne.xap"
ModuleName="ImplementationOne"
ModuleType="ImplementationOne.Module, ImplementationOne, Version=1.0.0.0" />
</Modularity:ModuleCatalog>
在我覆蓋我:
protected override void ConfigureContainer()
{
var unity = Unity.CreateFromXaml(new Uri("/UI;component/Repositories/UnityConfiguration.xaml", UriKind.Relative));
unity.Containers.Default.Configure(Container);
Container.RegisterInstance<Unity>(Unity.ConfigurationKey, unity);
base.ConfigureContainer();
}
但unity.Containers.Default.Configure(Container)
拋出該組件無法找到。 (如果我手動將DLL添加到UI.xap文件,這可以工作,所以我猜我缺少一些東西,因爲XAP要麼不被下載,要麼程序集沒有被註冊)。
我一直在爲此奮鬥了一個星期,閱讀了很多SO主題,但仍然無法解決問題。我找到的所有例子都包含直接的項目參考,這正是我想要避免的。
謝謝!