Dirk Bahle
Я рад, что вы сделали свой код загружаемым - он содержит множество проблем, которые вам нужно исправить, чтобы скомпилировать его:
Замените следующий XAML в StringRes.xaml
xmlns:topicsmd="clr-namespace:SchoolPrism.Topics.Model"
xmlns:topicsvm="clr-namespace:SchoolPrism.Topics.ViewModel">
с
xmlns:topicsmd="clr-namespace:SchoolPrism.Topics.Model;assembly=Topics"
xmlns:topicsvm="clr-namespace:SchoolPrism.Topics.ViewModel;assembly=Topics">
Это на самом деле то, что я пытался предложить в решении 1, не видя вашего кода...
Сделать уроки
TopicsViewModel
и
TopicSchema
публичные, поскольку в противном случае они будут невидимы вне своего собрания.
Я могу скомпилировать и запустить ваш код, когда внесу эти изменения. Но потом я получаю несвязанное исключение PRISM:
$exception {"Directory ../../SchoolPrismInfrastructure/Modules was not found."} System.InvalidOperationException
что я и исправил ниже для вас.
Основываясь на вопросах, которые вы задали, и простоте проблем, которые вы, кажется, не можете распознать и исправить, я рекомендую вам сначала построить свой проект без PRISM - а затем ввести PRISM, когда у вас есть рабочее приложение, - иначе вы будете пытаться жонглировать более чем одной совершенно новой темой одновременно, и некоторые шары разобьются о землю (я боюсь)...
Но я надеюсь, что это было полезно...
public class TopicSchema
{
public string Name {
get; set;
}
public int Week
{
get; set;
}
public Uri VidLink { get; set; }
public List<string> Instructions
{
get; set;
}
public string Code
{
get; set;
}
public string VidString
{
get { return VidString; }
set {
VidLink = new Uri("../../Topics/View/Assets/" + value, UriKind.Relative); // relative paths read from debug folder
}
}
}
public class TopicsViewModel
{
public TopicSchema currentTopic
{
get; set;
}
public ObservableCollection<TopicSchema> getAllWeeks
{
get { return TopicsModel.GetAllWeeks(); }
set { }
}
public DelegateCommand<string> displayTopic
{
get { return new DelegateCommand<string>(DisplayTopic); }
set { }
}
public void DisplayTopic (string week) {
var query = from topic in getAllWeeks where topic.Week== int.Parse(week) select topic;
currentTopic = query.First();
IModule allModules = ServiceLocator.Current.GetInstance<ModuleCatalog>().Modules.Where((ModuleInfo m) => m.ModuleName.Equals("TopicsModule")).Cast<IModule>().First(); //.ShowSandbox();
}
}
Я еще немного поиграл с ним и нашел простое решение для дополнительного исключения. Зайдите в Exporer раствора и:
1) добавьте папку модулей в
SchoolPrism
проект и
2) Добавить a ReadMe.txt файл в папку модули
3) щелкните правой кнопкой мыши на ReadMe.txt файл и выберите Свойства - выберите действие сборки=содержимое и скопируйте в OutputDirectory = всегда
Войти в
BootStrapper.cs
класс и отредактируйте следующие строки:
protected override IModuleCatalog CreateModuleCatalog ( ) {
return new DirectoryModuleCatalog() {
ModulePath = @".\Modules\" // executing path is debug/bin
};
}
это должно гарантировать, что у вас всегда есть каталог модулей, и PRISM не будет выдавать вышеупомянутое исключение... Приложение запускается для меня, когда я делаю это... не забудьте дать звезды решения...
nmeri17
Ну, 3+3 складывается в 6, что больше, чем оговоренная сумма для одного решения. Кроме того, я исправил это из подсказки в вашей гипотезе, так что я, вероятно, заслуживаю поделиться 2 из доступных 10 пунктов. Видишь? Справедливое распределение.
Итак, для бизнеса модули изначально были в основном проекте, но я переместил их в центральное место, чтобы они были доступны друг другу, не опасаясь циклической зависимости. Я намерен вызвать метод в сборке инфраструктуры, который установит путь к каталогу для каталога. Но этот вызов будет сделан из CreateModuleCatalog в загрузчике. Когда это не сработало, я закомментировал метод в целом, и приложение все еще компилировалось нормально. Я создал еще один вопрос по этому поводу, который подводит меня к вашему предложению
<quote>рекомендую вам сначала построить свой проект без призмы </quote>
Поскольку я все равно собираюсь использовать отраслевой стандарт для внедрения mvvm, зачем откладывать работу с ним?