Frage

Ich versuche, Dinge in eine benutzerdefinierte Viewpage (modelViewPage, von mvccontrib) zu injizieren)

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

Und meine autofac -Registrierungen sehen so aus:

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<>));

Aber ich erhalte diesen Fehler, wenn ich versuche, auf eine Ansicht zuzugreifen:

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 

Ich war ahnungslos, aber dann habe ich mir App_Web_edit.aspx.b2d4184a.thgwih90.0.cs angesehen und fand Folgendes:

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

Natürlich erbt die generierten Klassenansichten_Skadeanmällan_edit_aspx aus meinen ukfs.web.views.validatedModelViewPage, und wenn es versucht, es mit dem Standardkonstrukt zu installieren, können Sie es lösen?

War es hilfreich?

Lösung

Sie werden nicht in der Lage sein, den Konstruktor in Ansichten zu injizieren, da der ASPX-Compiler einen leeren CTOR generiert und wie er von Ihrer Basisklasse stammt, muss Ihre Basisklasse auch einen leeren CTOR haben.

Ich würde stattdessen nach Immobilieninjektion suchen, ansonsten versuchen Sie Folgendes zu erreichen:

  • Finden Sie den Ort, an dem die Ansichten instanziiert werden, und lassen
  • Lassen Sie den ASPX -Compiler den leeren CTOR nicht erzeugen

Ich weiß nicht, wie ich diese Dinge tun soll, also würde ich stattdessen auf Immobilieninjektion streben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top