l'iniezione di dipendenza in ViewPage personalizzato genera l'errore strano
-
21-09-2019 - |
Domanda
sto cercando di iniettare roba in un ViewPage personalizzato (ModelViewPage, da MvcContrib)
public class ValidatedModelViewPage<T> : ModelViewPage<T> where T : class
{
public ValidatedModelViewPage(IEnumerable<IBehavior<IMemberElement>> elementBehaviors)
: base(elementBehaviors.ToArray()) { }
}
e le mie registrazioni autofac simile a questa:
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<>));
, ma ottengo questo errore quando provo ad accedere a una visualizzazione:
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
fossi all'oscuro, ma poi ho guardato App_Web_edit.aspx.b2d4184a.thgwih90.0.cs ed ho trovato questo:
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() {
Naturalmente, i inheritates classe views_skadeanmälan_edit_aspx generati dal mio UKFS.Web.Views.ValidatedModelViewPage, e quando cerca di esempio con il costrutto di default .. così si può risolverlo?
Soluzione
Non sarà in grado di iniettare nel costruttore ViewPages perché il compilatore genera un aspx ctor vuota e quanto deriva dalla classe base, la vostra base di classe deve avere anche una ctor vuota.
mi piacerebbe guardare per l'iniezione di proprietà, invece, in caso contrario cercare di realizzare il seguente:
- Trova il luogo in cui sono istanziati viewpages, e di ottenere l'Autofact lì per istanziare pagina
- ottenere il compilatore aspx per non generare il ctor vuoto
Non so come fare queste cose, quindi mi piacerebbe miro per l'iniezione proprietà invece