我正在使用带有Prism的WPF。我是MVVM,Prism,DI容器等的新手。我正在尝试使用它们构建一个应用程序,以便学习和理解它们。
我已经使用Prism的事件聚合器,它工作正常。但是我也需要在大多数视图模型类(但不是全部(中使用Prism的新DialogService。
我希望有以下几点:
private readonly IEventAggregator _eventAggregator;
private readonly IDialogService _dialogService;
public SomeViewModel(IEventAggregator ea, IDialogService dialog)
{
// some other stuff here....
_eventAggregator = ea;
_dialogService = dialog;
}
我在 C# Corner 的某个地方找到了一个静态类:
public static class DependencyInjector
{
private static readonly UnityContainer UnityContainer = new UnityContainer();
public static void Register<I, T>() where T : I
{
UnityContainer.RegisterType<I, T>(new ContainerControlledLifetimeManager());
}
public static void InjectStub<I>(I instance)
{
UnityContainer.RegisterInstance(instance, new ContainerControlledLifetimeManager());
}
public static T Retrieve<T>()
{
return UnityContainer.Resolve<T>();
}
}
以及我如何在 App.xaml 中使用它.cs:
DependencyInjector.Register<IEventAggregator, EventAggregator>();
DependencyInjector.Register<IDialogService, DialogService>();
无需注册DialogService(因此仅使用EventAggregator(,这工作正常。 但现在我得到了一个例外。
我该如何使用它?
我在 C# Corner 的某个地方找到了一个静态类:[...]以及我如何在 App.xaml 中使用它.cs:[...]我该如何使用它?
不要。只是报废它。棱镜提供您需要做的一切
public SomeViewModel(IEventAggregator ea, IDialogService dialog)
开箱即用。只需将ViewModelLocator.AutoWireViewModel="True";
放入SomeView
的 xaml 中,Prism 就会神奇地创建一个具有正确构造函数参数的SomeViewModel
实例,并将其分配为数据上下文。
附带说明一下,如果你只是拿起并使用你偶然发现的你不理解的东西,人们会受到伤害。适用于汽车和爆炸物以及代码...