カスタム ViewPage への依存関係の注入により奇妙なエラーが生成される

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

質問

カスタム ViewPage (MvcContrib の ModelViewPage) に何かを注入しようとしています

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 が必要であるため、ViewPages にコンストラクターを注入することはできません。

代わりにプロパティインジェクションを探します。それ以外の場合は、次のことを実行してみてください。

  • ビューページがインスタンス化される場所を見つけて、そこから Autofact を取得してページをインスタンス化します。
  • 空の ctor を生成しないように aspx コンパイラを取得します

これらのことを行う方法がわからないので、代わりにプロパティ注入を目指します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top