Внедрение зависимости в пользовательскую страницу просмотра генерирует странную ошибку

StackOverflow https://stackoverflow.com/questions/1769442

Вопрос

Я пытаюсь внедрить вещи в пользовательскую визуальную страницу (ModelViewPage, от MVCContrib)

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 

Я был невежественен, но потом я посмотрел на 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() {

Конечно, сгенерированные классы Views_skadeanmälan_edit_aspx наследуют от моих ukfs.web.views.validatedmodelviewpage, и когда он пытается принять его с помощью конструкции по умолчанию .. так вы можете его решить?

Это было полезно?

Решение

Вы не сможете создавать инъекцию в просмотры, потому что компилятор ASPX генерирует пустой CTOR, и, поскольку он вытекает из вашего базового класса, ваш базовый класс также должен иметь пустой CTOR.

Вместо этого я бы искал инъекцию имущества, в противном случае попытаться сделать следующее:

  • Найдите место, где просмотры создаются, и получите автофакт, чтобы создать создание страницы
  • Получить компилятор ASPX, чтобы не генерировать пустой CTOR

Я не знаю, как делать эти вещи, поэтому я буду стремиться к инъекции имущества

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top