棱镜和团结 - 防止自动创建类型

时间:2012-02-17 20:27:38

标签: unity-container prism

我正在使用Prism和Unity作为容器创建一个WPF应用程序。有几次我没有注意到注册类型的顺序,当我没有注册时,Unity已经自动创建了一个类型(ViewModel到View构造函数)。然后我尝试使用ContainerControlledLifetimeManager()注册类型,思想我创建了一个单例。但是,自动创建意味着视图模型的多个实例。

除了显而易见的解决方案,即不是muppet并且不做上述操作,是否有办法阻止Unity自动创建未注册的类型,并且可能会抛出异常?

1 个答案:

答案 0 :(得分:1)

为每个ViewModel定义一个接口,然后相应地注册它们。

public interface IViewModel
{
     List<IUser> Users { get; }
}

public class ViewModel : IViewModel
{
     List<IUser> Users { get; }
}

Container.RegisterType<IViewModel, ViewModel>();

在构造函数中确保正在注入接口类型,而不是具体类型,因为Unity肯定会构造一个具体类型的实例,因为它是可解析的;而接口可以有N个实现。

此外,您的代码应该构建为应用程序中需要存在的数据应该来自服务,而不是ViewModel。使ViewModel成为单例不应该是您的方法,通过服务代理数据。通过这种方式,可以随意构建/销毁ViewModel,您想要保留的数据存在于其他位置。

Container.RegisterType<IService, Service>(new ContainerControlledLifetimeManager());
Container.RegisterType<IViewModel, ViewModel>();

...

public List<IUser> Users
{
     get { return Container.Resolve<IService>().GetUsers(); }
}