2013-04-02 4 views
0

Мне нужна ваша помощь еще раз. Я работаю над приложением с модульной концепцией.Unity & Prism Modularity - Проблемы с нагрузкой

Я хочу использовать Призма и Единство для этого. Я посмотрел пример быстрого запуска из Prism, и я также прочитал это article на MSDN.

Мой реальный код выглядит следующим образом:

public class Bootstrapper : UnityBootstrapper 
{ 
    protected override DependencyObject CreateShell() 
    { 
     return this.Container.Resolve<Shell>(); 
    } 

    protected override void InitializeShell() 
    { 
     base.InitializeShell(); 

     var window = this.Shell as Window; 
     if (window != null) 
     { 
      Application.Current.MainWindow = window; 
     } 
     else 
     { 
      throw new ArgumentException("The shell has to be a window."); 
     } 
    } 


    protected override IModuleCatalog CreateModuleCatalog() 
    { 
     return new ConfigurationModuleCatalog(); 
    } 
} 

Моя конфигурация:

<configuration> 
    <configSections> 
    <section name="modules" 
      type="Microsoft.Practices.Prism.Modularity.ModulesConfigurationSection, Microsoft.Practices.Prism"/> 
    </configSections> 
    <modules> 
    <module assemblyFile="Modules/MyApp.Module1.dll" 
      moduleType="MyApp.Module1.Module1Module, MyApp.Module1" 
      moduleName="Module1" /> 
    </modules> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
</configuration> 

У меня сейчас две проблемы, во-первых, что каталог не загружен правильно. Для меня кажется, что метод загрузки не вызывается, или что-то в этом роде.

Вторая проблема - следствие первого, я думаю, что метод initialize в моем модуле не вызывается.

Может кто-нибудь мне помочь?

ответ

2

Я взял ваш код, как есть в проекте Desktop Prism, но работает так, как ожидалось.

Где-то в вашем приложении, вам необходимо (как минимум):

var bootstrapper = new Bootstrapper(); 
bootstrapper.Run(); 

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

Это то, что мой модуль «инициализация» выглядит следующим образом:

using System; 
using System.Windows; 
using Microsoft.Practices.Prism.Modularity; 

namespace MyApp.Module1 
{ 
    class Module1Module : IModule 
    { 
     public void Initialize() 
     { 
      MessageBox.Show("Hello world!"); 
     } 
    } 
} 

Одна последняя вещь, чтобы проверить, будет ли он может найти MyApp.Module1.dll в каталоге он ищет, но вы бы получить ModuleTypeLoadingException после исключения FileNotFoundException исключение первого шанса, если это не так.

Редактировать: вот the complete source code для тестового решения, которое я сделал. Я не могу думать о каких-либо различиях, которые заставляют его работать для меня, но не для вас. Проверьте это.

+0

Спасибо за ответ. Извините, забыл опубликовать мой код App.xaml.cs. Я переопределяю Start on и начинаю загрузку. Мой класс модуля в основном такой же, как у вас, у меня есть только еще одна тестовая строка :-) Annd наконец да файл находится в правильной папке, и я не получаю никакого исключения. Но он все еще не работает. – Sukram

+0

@Sukram: Это в значительной степени то, что я и сделал, я закрепил исходный код решения, потому что я не могу придумать ничего, что мог бы сделать по-другому. – Thorarin

+0

@ Thorarin: Спасибо за ваш код, я не нахожу никаких девайнеров для своего, но он работает. Я создаю новый проект, основанный на ваших классах, и теперь он отлично работает. Спасибо за вашу помощь и ваш пример кода. – Sukram

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