Основная идея, которую я пытаюсь выполнить, - это настроить приложение 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 либо не загружается, либо сборка не регистрируется).
Я боролся с этим в течение недели, читал много тем, но все еще не могу решить проблему. Все примеры, которые я нашел, содержат прямые проектные рефренсы, которых я и стараюсь избегать.
Спасибо!