8

私は最初の非例のオーチャードモジュールの開発に忙しい。これは、カスタム(EF)データアクセスを備えた少数のコントローラーとビューであり、Orchardのコンテンツタイプとパーツにほとんど依存していません。通常、Application_Startハンドラーでマッピングを設定しますが、このMVCモジュールのアクションはOrchardアプリケーションのコンテキストで呼び出されるため、そのエントリポイントはなくなりました。私の最も明白で即時の解決策は、マッピングの初期化をマップされたビューモデルの静的コンストラクターに移動することです。

public class ApplicantPersonalDetailsModel : MappedViewModel<Applicant>
{
    static ApplicantPersonalDetailsModel()
    {
        Mapper.CreateMap<Applicant, ApplicantPersonalDetailsModel>().Bidirectional();
    }
    ....
}

他にどのようにこれを行うことができますか?一般的にMVC3/4でこれを行うためのより良い方法はありますか、またはできれば、アプリケーションの起動時にこれを達成するためにOrchardアプリケーションで取得できるイベントまたはフックはありますか?

4

2 に答える 2

3

Handler は、変数を初期化するのに最適な場所です。モジュール内でパーツを定義していない場合でも、ドライバーなしでハンドラーを使用して定義できます。

public class InitPartHandler : ContentHandler
{
    public InitPartHandler(IRepository<InitPartRecord> repository)
    {
         OnInitializing<InitPart>((context, part) =>
                 // do your initialization here
            );
    }
}

編集

InitPart and InitPartRecord would be  

public class InitPart : ContentPart<InitPartRecord>
{

}

public class InitPartRecord : ContentPartRecord
{

}
于 2012-12-21T07:53:57.780 に答える