Pregunta

Estoy tratando de inyectar material en un ViewPage personalizado (ModelViewPage, desde MvcContrib)

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

y mis registros autofac este aspecto:

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

pero me sale este error cuando intento acceder a una vista:

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 

i eran idea, pero luego i miraba App_Web_edit.aspx.b2d4184a.thgwih90.0.cs y encontré esto:

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

Por supuesto, los generados inheritates views_skadeanmälan_edit_aspx clase de mi UKFS.Web.Views.ValidatedModelViewPage, y cuando se trata de instancia con el constructo por defecto .. por lo que puede resolverlo?

¿Fue útil?

Solución

Usted no será capaz de inyectar en ViewPages constructor porque el compilador genera un aspx ctor vacío y como se deriva de su clase base, su clase base también debe tener un ctor vacía.

Me vería para inyección propiedad en lugar, de lo contrario tratar de lograr lo siguiente:

  • Encuentra el lugar donde se crean instancias viewpages, y obtener el AutoFACT allí para crear una instancia de la página
  • obtener el compilador aspx para no generar la ctor vacío

No sé cómo hacer esas cosas, así que me apunto para inyección propiedad en lugar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top