在弹出窗口中获取IOC容器

Pra*_*V J 14 c# wpf prism unity-container prism-5

我在WPF应用程序中使用PRISM 5.而在我的应用程序壳牌观点有两个区域,为A和区域应该安放A包含一个弹出考虑它(PRISM 5交互功能是用来显示弹出式).

当我在视图的构造函数中创建弹出视图模型的实例时,应用程序正在工作.

工作代码

public PopupView()
{
    InitializeComponent();
    this.DataContext = new PopupViewModel(); // Working code
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用依赖注入创建视图模型实例时.应用程序InitializeComponent();在父视图(视图A)上失败 .

DI不工作代码

public PopupView(PopupViewModel viewModel)
{
    InitializeComponent(); // Failing in AView initialze
                           // before reaching here

    this.DataContext = viewModel;
}
Run Code Online (Sandbox Code Playgroud)

在module/bootstrapper中查看模型注册

container.RegisterType<AViewModel>();
Run Code Online (Sandbox Code Playgroud)

发生了错误

NULLReference发生异常

Stacktrace(编辑问题)

at System.DefaultBinder.BindToMethod(BindingFlags bindingAttr, MethodBase[] match, Object[]& args, ParameterModifier[] modifiers, CultureInfo cultureInfo, String[] names, Object& state)
   at MS.Internal.Xaml.Runtime.DynamicMethodRuntime.CreateInstanceWithCtor(Type type, Object[] args)
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateInstance(XamlType xamlType, Object[] args)
   at MS.Internal.Xaml.Runtime.PartialTrustTolerantRuntime.CreateInstance(XamlType xamlType, Object[] args)
   at System.Xaml.XamlObjectWriter.Logic_CreateAndAssignToParentStart(ObjectWriterContext ctx)
   at System.Xaml.XamlObjectWriter.WriteEndObject()
   at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at MyNamespace.AView.InitializeComponent() in e:\xxx\xxxxx\xxx\AView.xaml:line 1
   at MyNamespace.AView..ctor(AViewModel viewModel) in e:\xxx\xxxxx\xxx\AView.xaml.cs:line 18
Run Code Online (Sandbox Code Playgroud)

AViewModel(编辑一个以避免项目特定信息)

 public class ItemSelectionNotification : Confirmation
 { 
      //This class includes properties related to my project
 }

public class AViewModel
 {
        public InteractionRequest<ItemSelectionNotification> ItemSelectionRequest { get; private set; }

        public AViewModel(EventAggregator eventAggregator,IUnityContainer container)
        {
            this.eventAggregator = eventAggregator;
            this.container = container;
            ItemSelectionRequest = new InteractionRequest<ItemSelectionNotification>();
            SettingsCommand = new DelegateCommand(OnClickSetting);    //Command for settings button click      
        }

        //Button click handling
        public void OnClickSetting()
        {                      
                var notification = new ItemSelectionNotification()
                    {
                        Title = "Items"
                    };
                this.ItemSelectionRequest.Raise(notification,OnSaveCallback);
         }  

        private void OnSaveCallback(PropertySelectionNotification returned)
        {
        }   
 }
Run Code Online (Sandbox Code Playgroud)

Jai*_*ero 0

我认为您正在注册 AViewModel 但 IoC 容器没有PopupViewModel的正确实例或工厂。从我的角度来看,您的 View 需要PopupViewModel作为依赖项,但容器无法解析它,因为该类型未注册。

另外,请将您的 XAML 文件推送到此处,因为异常是从 InitializeComponent() 方法引发的,这是因为标记不一致而发生的。因此,我们需要查看标记以便为您提供更多反馈。