Prism中注册的类型在哪里?

时间:2009-07-20 12:59:24

标签: wpf controller prism

Prism Commanding_Desktop QuickStart 解决方案中,在OrderModule中,它定义了以下变量:

this.container.Resolve<OrdersEditorPresentationModel>()

这是注册的位置,以便可以从容器中“解析”出来?我在下面看到 OrdersRepository 正在注册,但我找不到哪里在正在注册 OrdersEditorPresentationModel 的项目中。

OrderModule.cs:

public void Initialize()
{
    this.container.RegisterType<IOrdersRepository, OrdersRepository>(new ContainerControlledLifetimeManager());

    OrdersEditorPresentationModel presentationModel = this.container.Resolve<OrdersEditorPresentationModel>();

    ...
}

OrdersEditorPresentationModel.cs:

public class OrdersEditorPresentationModel : INotifyPropertyChanged
{
    ...

    public OrdersEditorPresentationModel(OrdersEditorView view, IOrdersRepository ordersRepository, OrdersCommandProxy commandProxy)
    {
        this.ordersRepository = ordersRepository;
        this.commandProxy = commandProxy;
        this.Orders = new ObservableCollection<OrderPresentationModel>();
        this.PopulateOrders();

        this.View = view;
        view.Model = this;
    }

    ...

上面解析的类型中的构造函数具有特定签名,但其中是此签名的定义:

public OrdersEditorPresentationModel(OrdersEditorView view, 
                    IOrdersRepository ordersRepository, 
                    OrdersCommandProxy commandProxy)

我认为它可能是默认签名,但Prism文档中的另一个例子是,presenter构造函数有一个不同的签名

public EmployeesPresenter(IEmployeesView view, 
        IEmployeesListPresenter listPresenter,
        IEmployeesController employeeController)

1 个答案:

答案 0 :(得分:1)

此类型不必在任何地方声明,因为它是具体实现。对于无法自动实例化的接口(如IMyInterface),您必须事先注册一个具体的实现,以便当对象具有类型为IMyInterface的depdendency时,Container知道要实例化的内容。

相关问题