我正在尝试将内容注入到自定义 ViewPage (ModelViewPage,来自 MvcContrib)

public class ValidatedModelViewPage<T> : ModelViewPage<T> where T : class
{
    public ValidatedModelViewPage(IEnumerable<IBehavior<IMemberElement>> elementBehaviors)
       : base(elementBehaviors.ToArray()) { }
}

我的 Autofac 注册如下所示:

builder.RegisterCollection<IBehavior<IMemberElement>>().As<IEnumerable<IBehavior<IMemberElement>>>();
builder.Register<NotNullBehavior>().MemberOf<IEnumerable<IBehavior<IMemberElement>>>();
builder.Register<StringLenghBehavior>().MemberOf<IEnumerable<IBehavior<IMemberElement>>>();

builder.RegisterGeneric(typeof(ValidatedModelViewPage<>));

但当我尝试访问视图时出现此错误:

Compiler Error Message: CS1729: 'UKFS.Web.Views.ValidatedModelViewPage<UKFS.Data.Entities.Skadeanmälan>' does not contain a constructor that takes '0' arguments

Source Error:

Line 194:        private static object @__fileDependencies;
Line 195:        
Line 196:        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
Line 197:        public views_skadeanmälan_edit_aspx() {
Line 198:            string[] dependencies;


Source File: c:\Users\Carl\AppData\Local\Temp\Temporary ASP.NET Files\root\be9ddc15\a84d5058\App_Web_edit.aspx.b2d4184a.thgwih90.0.cs    Line: 196 

我一无所知,但后来我查看了 App_Web_edit.aspx.b2d4184a.thgwih90.0.cs 并发现了这个:

Line 190:      public class views_skadeanmälan_edit_aspx : UKFS.Web.Views.ValidatedModelViewPage<Skadeanmälan>, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler {
Line 191:          
Line 192:          private static bool @__initialized;
Line 193:          
Line 194:          private static object @__fileDependencies;
Line 195:          
Line 196:          [System.Diagnostics.DebuggerNonUserCodeAttribute()]
Line 197:          public views_skadeanmälan_edit_aspx() {

当然,生成的类views_skadeanmälan_edit_aspx继承自我的UKFS.Web.Views.ValidatedModelViewPage,当它尝试使用默认构造实例化它时..那你能解决吗?

有帮助吗?

解决方案

您将无法通过构造函数注入 ViewPages,因为 aspx 编译器会生成一个空的 ctor,并且由于它派生自您的基类,因此您的基类也必须有一个空的 ctor。

我会寻找属性注入,否则尝试完成以下任务:

  • 找到viewpages实例化的地方,并在那里获取Autofact来实例化页面
  • 让 aspx 编译器不生成空 ctor

我不知道如何做这些事情,所以我的目标是财产注入

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top