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

标签 constructor controller t4mvc

我将 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/

    相关文章:

    c++ - 对象作为参数传递,就像传递构造函数值一样

    ruby-on-rails - 在另一个Rails中使用 Controller 中的方法

    asp.net-mvc-3 - html.TextBoxFor 和 html.Textbox,POSTing 值,参数中的模型

    c# - AssemblyBinding BindingRedirect 不适用于带有 T4MVCExtensions 的 MVC4 应用程序

    c# - MVC + T4MVC - 如何将 url 操作传递给表单?或者生成 Action /id 的替代方法?

    asp.net-mvc - T4MVC支持WebApi吗?

    python - 有没有办法在不调用 __init__ 的情况下实例化一个类?

    java - 在 Apache Tomcat 中多次调用 REST 服务构造函数

    scala - 类构造函数声明...声明同一件事的两种方法?

    jquery - jQuery和AJAX仅发送值的第一行