@xXNullXx

При инициализации модуля возникает ошибка: «Значение не может быть неопределенным»?

Доброго времени суток!

Пытаюсь научится делать приложения с использование пантера MVVM и IoC контейнерам.

В данном приложение используются данные библиотеки:
  • Prism.Wpf;
  • Prism.Autofac;
  • Autofac;

Дополнительно: Prism.Mef(так как почти не задействуется).

Вот сам подозреваемый:
namespace DailyLog.Desktop.MainWindowMenu
{
    [ModuleExport(typeof(MainWindowMenuModule))] // Единствиенное где используется "Prism.Mef"
    public class MainWindowMenuModule : IModule
    {
        [Import]
        public IRegionManager Region { get; set; }

        public void OnInitialized(IContainerProvider containerProvider)
        {
            Region.RegisterViewWithRegion("MainWindowMenuRegion", typeof(HomeView));
        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            
        }
    }
}


Здесь регистрации модуля "MainWindowMenuModule" и самого модуля.
namespace DailyLog.Desktop.MainWindowMenu
{
    public class MainWindowMenuModuleRegistry : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            base.Load(builder);

            builder.RegisterType<MainWindowMenuModule>();
            builder.RegisterType<HomeView>();
        }
    }
}


Вот загрузчик:
namespace DailyLog.Desktop.MainWindowMenu
{
    public class Bootstrapper : AutofacBootstrapper
    {
        protected override void ConfigureContainerBuilder(ContainerBuilder builder)
        {
            base.ConfigureContainerBuilder(builder);
            builder.RegisterType<Shell.Views.Shell>();

            //  Регистрация Autofac module здесь...
            builder.RegisterModule<MainWindowMenuModuleRegistry>();
        }

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

            //  Регистрация Prism module здесь...
            Type typeNewsModule = typeof(MainWindowMenuModule);
            ModuleCatalog.AddModule(new ModuleInfo(typeNewsModule.Name, typeNewsModule.AssemblyQualifiedName));
        }

        protected override DependencyObject CreateShell()
        {
            return Container.Resolve<Shell.Views.Shell>();
        }

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

            Application.Current.MainWindow = (Shell.Views.Shell)this.Shell;
            Application.Current.MainWindow.Show();
        }
    }
}


Полный текст ошибки:
Prism.Modularity.ModuleInitializeException: "An exception occurred while initializing module 'MainWindowMenuModule'.
- The exception message was: Значение не может быть неопределенным.
Имя параметра: context
Check the InnerException property of the exception for more information. If the exception occurred
while creating an object in a DI container, you can exception.GetRootException() to help locate the
root cause of the problem."


Логи:
Изначально это исключение было создано в этом стеке вызовов:
Autofac.ResolutionExtensions.ResolveService(Autofac.IComponentContext, Autofac.Core.Service, System.Collections.Generic.IEnumerable)
Prism.Autofac.Ioc.AutofacContainerExtension.Resolve(System.Type)
Prism.Modularity.ModuleInitializer.CreateModule(string)
Prism.Modularity.ModuleInitializer.CreateModule(Prism.Modularity.IModuleInfo)
Prism.Modularity.ModuleInitializer.Initialize(Prism.Modularity.IModuleInfo)


В чем собственно проблема?

P.s ссылка на GitHub если вдруг... https://github.com/xXJamXx/DailyLog/tree/development
  • Вопрос задан
  • 750 просмотров
Пригласить эксперта
Ответы на вопрос 1
Скорее всего, у вас в момент вызова Region имел значение null. Попробуйте запустить в режиме отладки, предварительно поставив точку останова в начале метода OnInitialized. Если там действительно null, то проверьте, что IRegionManager регистрируется в вашем IoC контейнере, а сам MainWindowModule резолвится через контейнер
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы