2012-01-06 106 views
1

我試圖完成的基本想法是配置我的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主題,但仍然無法解決問題。我找到的所有例子都包含直接的項目參考,這正是我想要避免的。

謝謝!

回答