我将 T4MVC 与 MVC2 一起使用。
我有以下构建 block :
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; }
}
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/