2012-01-06 4 views
1

Основная идея, которую я пытаюсь выполнить, - это настроить приложение Silverlight для разрешения его зависимостей во время выполнения (без необходимости добавлять ссылки на зависимые библиотеки DLL в проекте).Динамическая загрузка модулей в Silverlight с использованием Prism и Unity

У меня есть проект UI, который ссылается на проект инфраструктуры, чем содержит различные интерфейсы (например, репозитории). Конкретные реализации этих интерфейсов хранятся в отдельных приложениях SL, которые я хочу загрузить и связать во время выполнения. Я хочу иметь возможность настроить приложение UI из внешнего файла конфигурации, чтобы я мог переключиться с одной реализации интерфейса на другую во время выполнения без необходимости перекомпилировать приложение.

Что я сделал до сих пор, так это создать модуль Prism для каждой реализации (в отдельном приложении SL) и получить эти XAP, размещенные в моем веб-проекте. В моем приложении 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 либо не загружается, либо сборка не регистрируется).

Я боролся с этим в течение недели, читал много тем, но все еще не могу решить проблему. Все примеры, которые я нашел, содержат прямые проектные рефренсы, которых я и стараюсь избегать.

Спасибо!

ответ

Смежные вопросы