gpt4 book ai didi

constructor - t4mvc : Cannot inherit a controller class which has no default constructor?

转载 作者:行者123 更新时间:2023-12-04 04:00:16 32 4
gpt4 key购买 nike

我将 T4MVC 与 MVC2 一起使用。

我有以下构建 block :

  • 一个简单的实体接口(interface),它定义了每个 POCO 实体必须有一个 long Id属性(property):
    public interface IEntity
    {
    public long Id;
    }
  • 实现 IEntity 的简单 POCO 类接口(interface)并具有一些字符串属性:
    public class CD : IEntity
    {
    public long Id { get; set; }

    public long Name { get; set; }
    }
  • 基础 Controller :
    public abstract class EntityController<T> : Controller where T : class, global::IEntity
    {
    public EntityController(IEntityManager<T> manager);
    }
  • 我在我的 CDController 中使用这个基本 Controller (其中 CDManager 实现了 IEntityManager 接口(interface),这是一个 UnitOfWork 模式,用于添加 CRUD 功能):
    public partial class CDController : EntityController<CD>
    {
    public CDController() : base(new CDManager()) { }
    }

  • 当我运行我的 t4 模板时,会生成以下代码:
    namespace MyApp.Web.Controllers {
    public partial class CDController {
    [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
    protected CDController(Dummy d) { }

    但这在编译期间给了我一个错误:

    MyApp.EntityController<CD> does not contain a constructor that takes 0 arguments



    我该如何解决这个问题?

    最佳答案

    我希望 Controller 基类是抽象的,并且它的构造函数受到保护和参数化。通过向 ControllerBase 添加一个抛出 NotImplementedException 的空白构造函数来解决此问题。

    感觉不太对,但它完成了工作。唯一的问题是,当与依赖注入(inject)结合使用时,会调用错误的构造函数——因为它会抛出异常,应用程序会崩溃。

    代码:

    public abstract class ControllerBase : Controller
    {
    protected object AlwaysSupply { get; private set; }

    public ControllerBase()
    {
    throw new NotImplementedException();
    }

    public ControllerBase(object alwaysSupply)
    {
    AlwaysSupply = alwaysSupply;
    }
    }

    这将导致 T4MVC 生成可编译的代码。错误似乎是它总是试图为 Controller 类生成一个空白(无参数)构造函数。

    希望这可以帮助某人。

    关于constructor - t4mvc : Cannot inherit a controller class which has no default constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6730989/

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