在 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)
答案 0 :(得分:1)
此类型不必在任何地方声明,因为它是具体实现。对于无法自动实例化的接口(如IMyInterface),您必须事先注册一个具体的实现,以便当对象具有类型为IMyInterface的depdendency时,Container知道要实例化的内容。