在使用依赖注入时为类设置初始值
本文关键字:设置 依赖 注入 | 更新日期: 2023-09-27 18:09:40
我在我的应用程序中使用unity进行依赖注入。根据最佳实践,只有我的应用程序的根知道关于UnityContainer
的任何信息,其他所有内容都向下解析。
例如,我的WorksheetViewModel
是:
public WorksheetViewModel(CollateralEditViewModel collateralEditViewModel,
AddCollateralToWorksheetViewModel addCollateralToWorksheetViewModel,
CollateralWorksheetsViewModel collateralWorksheetsViewModel,
Publisher<RequestEventArgs> freaPublisher,
IWorksheetLogic worksheetLogic)
这个效果很好。但是,当我准备显示我的工作表时(从另一个视图,而不是应用程序根视图),我需要向它发送它的工作表id,以便它可以初始化自己。
是否有办法在构造函数中做到这一点?这似乎是不可能的,因为WorksheetViewModel
已经建成了。这里的常见模式只是使用另一个方法作为伪构造函数吗?即
public void InitializeWorksheetWithID(int ID)
或者有比DI更好的方法吗?
也许我需要更多的信息。想象一下打开WorksheetViewModel
的人是这样的:
public class MyOtherViewModel
{
private WorksheetViewModel _worksheetViewModel;
public MyOtherViewModel(WorksheetViewModel worksheetViewModel)
{
_worksheetViewModel = worksheetViewModel;
}
public void SomeActionPerformedByUser(object sender, MyEventArgs e)
{
var worksheetID = e.ID;
_worksheetViewModel.InitializeWorksheetWithID(worksheetID);
DoStuffToDisplayView(_worksheetViewModel);
}
}
这似乎是依赖注入模式中非常常见的场景。我很担心为什么我找不到关于这个主题的很多信息。
最简单的选择是像您提到的那样创建一个setter。有很多方法,但这是最简单的。你选择使用Unity作为一个DI容器,因此你的构造函数作为依赖连接代码。ID
不是依赖项。
根据你的评论…
在unity解析类的时候,我还不知道工作表需要什么ID。
…我认为可以安全地假设一个没有ID的有效工作表可能存在,因此ID不是构造时的问题。
如果我误解了你的评论,那么你可能要考虑创建这个:
struct WorksheetId
{
int Id;
}
并在构造函数中添加WorksheetId
作为依赖项。