Динамическая загрузка модулей в Silverlight с использованием Prism и Unity - PullRequest
1 голос
/ 06 января 2012

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

Спасибо!

1 Ответ

0 голосов
/ 11 января 2012

Для обнаружения сборки и динамической загрузки XAP вы должны использовать контейнер MEF, а не Unity.

См. Дополнительную информацию из официального источника: http://msdn.microsoft.com/en-us/library/ff921140(v=PandP.40).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...