Ich verwende PRISM 5 in meiner WPF-Anwendung. Und die Shell-Ansicht in meiner Anwendung hat zwei Regionen, betrachte sie als A und B. Die Region A enthält ein POPUP (die PRISM 5-Interaktivitätsfunktion wird verwendet, um ein Popup anzuzeigen).IOC-Container in einem Popup abrufen
Die Anwendung funktioniert, wenn ich eine Instanz des Popup-View-Modells im Konstruktor der Ansicht erstellen.
Arbeits Code
public PopupView()
{
InitializeComponent();
this.DataContext = new PopupViewModel(); // Working code
}
Aber wenn ich versuche Ansicht Modellinstanz mit der Abhängigkeit Injektion Anwendung nicht auf den InitializeComponent();
der übergeordneten Ansicht (Ansicht A) zu erstellen.
DI Problem Code
public PopupView(PopupViewModel viewModel)
{
InitializeComponent(); // Failing in AView initialze
// before reaching here
this.DataContext = viewModel;
}
anzeigen Mustereintragung in Modul/Bootstrap
container.RegisterType<AViewModel>();
Fehler
Nullreference Ausnahme aufgetreten aufgetreten
Stacktrace (Herausgegeben für die Frage)
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
AViewModel (ein Edited projektspezifische Informationen zu vermeiden)
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)
{
}
}
"Die Anwendung versagt", was das bedeutet? Hast du eine Ausnahme? – Console
Können Sie bitte den Code posten, der das angezeigte Popup aufruft? – Console
In StackTrace wird Unity nicht verwendet. Es kann AView mit keinem Standardkonstruktor erstellen. Sie können InitializeComponent nicht zum Auflösen von Komponenten aus dem Unity-Container verwenden. – norekhov