2009-11-20 41 views
1

我想要的东西注入到一个自定义的ViewPage(ModelViewPage,从MvcContrib)依赖注入到自定义的ViewPage产生奇怪的错误

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 

我很笨,但后来我看着应用程序_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,当它试图实例其与默认建设..所以你能解决它?

回答

1

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

我会寻找物业注射代替,否则尽量做到以下几点:

  • 找到在哪里viewpages被实例化的地方,并获得Autofact有实例的页面
  • 得到ASPX编译不产生空的构造函数

我不知道该怎么做那些事情,所以我的目标是为财产而不是注射