Призма модульности: что такое moduleType (и moduleName)? - PullRequest
1 голос
/ 09 января 2012

При настройке модулей в Prism / WPF, используя

<section name="modules" type="Microsoft.Practices.Prism.Modularity.ModulesConfigurationSection, Microsoft.Practices.Prism"

... в файле app.config есть раздел, куда вы можете добавить каждый модуль, например так:

<module assemblyFile="MyCompany.ABC.Client.Module.OutlookBar.dll"
moduleType="MyCompany.ABC.Client.Module.OutlookBarModule.OutlookBarModule,     
MyCompany.ABC.Client.Module.OutlookBar" moduleName="OutlookBarModule" 
startupLoaded="true"/>

Этот код работает, но мне бы очень хотелось узнать больше об атрибуте moduleType.Из чего он состоит?

Сначала я подумал, что это namespace.classname + comma + namespace.(это полное имя класса, пространство имен (без имени класса).

Но пространство имен, окружающее «основной класс» в моем OutlookBar, называется так: MyCompany.ABC.Client.Module.OutlookBarModule и егоимя класса - "OutlookBarModule".

Итак ... что такое вторая часть (после запятой) определения moduleType ??? Я не могу найти это имя ("MyCompany.ABC.Client.Module.OutlookBar ") в моем коде, кроме имени сборки.

С уважением, Андреас

Ответы [ 3 ]

2 голосов
/ 09 января 2012

Это имя сборки (без расширения файла, которое может быть .exe или .dll).Это общий шаблон для ссылки на классы через конфигурацию в .NET: "namespace.classname, assemblyname".

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

В Prism 4 атрибут ModuleType - это полное имя сборки типа Type, который реализует IModule, который обычно является классом с именем ModuleInit в каждом проекте

ModuleInitializer.cs Prism показывает следующее:

protected virtual IModule CreateModule(ModuleInfo moduleInfo)
{
    if (moduleInfo == null) throw new ArgumentNullException("moduleInfo");

    //Below Prism is passing the ModuleType property
    return this.CreateModule(moduleInfo.ModuleType);
}

protected virtual IModule CreateModule(string typeName)
{
    Type moduleType = Type.GetType(typeName);
    if (moduleType == null)
    {
        throw new ModuleInitializeException(
            string.Format(CultureInfo.CurrentCulture,
            Properties.Resources.FailedToGetType, typeName));
    }

    //and then that type is cast to IModule
    return (IModule)this.serviceLocator.GetInstance(moduleType);
}
0 голосов
/ 09 января 2012

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

Взгляните на MSDN

...