gpt4 book ai didi

c# - 使用继承

转载 作者:可可西里 更新时间:2023-11-01 08:13:43 26 4
gpt4 key购买 nike

我目前正在开发一款在一个场景中使用了继承的应用程序。但是现在我有一项任务需要从我的模型构建器返回多个 View 模型。我将在下面描述:

在我的 Controller 方法中,我们保持轻便并使用了模型构建器。

public ViewResult Summary(ReportArgs args)
{
return View<SomeBuilder>(args);
}

然后这会触发从基类继承的构建器方法。

public class SomeBuilder : NewBuilder<TaskVM, Task> {}

然后NewBuilder有如下实现:

public class NewBuilder<TModel, TItem> : ReportBuilder where TModel : SomeReportVM<TItem>, new() where TItem : ReportItem
{
public override ReportVM Build(ReportArgs args)
{
/* Some code to get roles here */
return new TModel
{
FeedbackModel = FeedbackBuilder.Build(inputGrid.Report.Id),

};
}
}

我需要做的是从 NewBuilder Controller 返回一个不同的虚拟机,但很难找到执行此操作的最佳方法?

我无法在传入 TaskVM 时返回 InvalidVM。只是为了让人们知道这正在被不同 VM 的多个 View 使用,并且实体类将被传入?

最佳答案

public class EnhancedBuilder<TModel, TItem, TInvalidModel> : NewBuilder<TModel, TItem>
where TModel : SomeReportVM<TItem>, new()
where TItem : ReportItem
where TInvalidModel : SomeReportVM<TItem>, new() // Made an assumption here.
// It would likely be wise to create an InvalidVM base class to handle common
// issues such as roles, and defer the rest to child builders.
{
public override ReportVM Build(ReportArgs args)
{
/* Some code to get roles here */

if( ** validation code fails ** )
{
return new TInvalidModel
{
}
}

return new TModel
{
FeedbackModel = FeedbackBuilder.Build(inputGrid.Report.Id),

};
}
}

那么你的 SomeBuilder 看起来会有点不同。

public class SomeBuilder<TInvalidVM> : NewBuilder<TaskVM, Task, TInvalidVM>
where TInvalidVM : SomeReportVM<TItem>, new()
{
}

最后调用它:

public ViewResult Summary(ReportArgs args)
{
return View<SomeBuilder<MyInvalidVM>>(args);
}

关于c# - 使用继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20324666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com