代码之家  ›  专栏  ›  技术社区  ›  Carl Hörberg

自定义视图页中的依赖项注入会产生奇怪的错误

  •  1
  • Carl Hörberg  · 技术社区  · 14 年前

    我正在尝试将内容注入自定义视图页(ModelViewPage,来自mvcontrib)

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

    我的自动对焦注册如下:

    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() {
    

    当然,生成的类视图“skadeam”lan“edit”aspx继承自my ukfs.web.views.validateModelViewPage,并且当它尝试使用默认构造来实例它时。你能解决吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   CVertex    14 年前

    因为aspx编译器生成一个空的ctor,并且当它从您的基类派生时,您的基类也必须有一个空的ctor,所以您将无法将构造函数注入到viewpages中。

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

    • 找到实例化视图页的位置,并在那里获取autoact以实例化该页。
    • 获取aspx编译器以不生成空ctor

    我不知道怎么做,所以我的目标是注入财产。