Основная идея, которую я пытаюсь реализовать, - это настроить мое приложение Silverlight для разрешения его зависимостей во время выполнения (без необходимости добавлять ссылки на зависимые библиотеки DLL в проекте).
У меня есть проект пользовательского интерфейсакоторый ссылается на проект инфраструктуры, чем содержит различные интерфейсы (например, репозитории).Конкретные реализации этих интерфейсов хранятся в отдельных SL-приложениях, которые я хочу загрузить и на которые ссылаюсь во время выполнения.Я хочу иметь возможность настроить приложение UI из внешнего файла конфигурации, чтобы я мог переключаться с одной реализации интерфейса на другую во время выполнения без перекомпиляции приложения.
То, что я до сих пор делал, - это созданиемодуль Prism для каждой реализации (в отдельном приложении SL) и получить эти XAP, размещенные в моем веб-проекте.В моем приложении пользовательского интерфейса я создал 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>
В моем ConfigureContainer
переопределении у меня есть:
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, но все еще не можете решить проблему.Все примеры, которые я нашел, содержат прямые ссылки на проекты, чего я и стараюсь избегать.
Спасибо!