我正忙着开发我的第一个非示例Orchard模块.它是一些控制器和视图,具有自定义(EF)数据访问,并且在很大程度上独立于Orchard内容类型和部件.通常我在Application_Start处理程序中设置映射,但由于此MVC模块中的操作将在Orchard应用程序的上下文中调用,因此我不再具有该入口点.我最明显和最直接的解决方案是将映射初始化移动到映射视图模型的静态构造函数,例如
public class ApplicantPersonalDetailsModel : Mappedviewmodel<Applicant> { static ApplicantPersonalDetailsModel() { Mapper.CreateMap<Applicant,ApplicantPersonalDetailsModel>().Bidirectional(); } .... }
我怎么能这样做?有没有更好的方法在MVC3 / 4中执行此操作,或者最好是,我可以在Orchard应用程序中获取的事件或钩子也可以在应用程序启动时实现此目的?
解决方法
我这样做的方法是实现IOrchardShellEvents
public class MenuOrchardShellEvents : IOrchardShellEvents { public void Activated() { Mapper.CreateMap<YSRB.Menu.Models.Records.Customer,YSRB.Menu.Models.viewmodels.Customerviewmodel>() .ForMember(c => c.CustomerType,m => m.MapFrom( x => (CustomerTypes)x.CustomerType ) ); Mapper.CreateMap<YSRB.Menu.Models.viewmodels.Customerviewmodel,YSRB.Menu.Models.Records.Customer>() .ForMember(c => c.CustomerType,m => m.MapFrom( x => (int)x.CustomerType ) ); } public void Terminating() { //Do nothing } }
希望这可以帮助.