我正忙于开发我的第一个非示例 Orchard 模块。它是少数 Controller 和 View ,具有自定义 (EF) 数据访问权限,并且在很大程度上独立于 Orchard 内容类型和部分。通常我会在 Application_Start 处理程序中设置映射,但由于此 MVC 模块中的操作将在 Orchard 应用程序的上下文中调用,因此我不再拥有该入口点。我最明显和最直接的解决方案是将映射初始化移动到映射 View 模型的静态构造函数中,例如
public class ApplicantPersonalDetailsModel : MappedViewModel<Applicant>
{
static ApplicantPersonalDetailsModel()
{
Mapper.CreateMap<Applicant, ApplicantPersonalDetailsModel>().Bidirectional();
}
....
}
我还能怎么做?一般来说,在 MVC3/4 中是否有更好的方法来执行此操作,或者最好是我可以在 Orchard 应用程序中抓取的事件或 Hook ,以便在应用程序启动时也实现此目的?
最佳答案
我的做法是实现 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
}
}
希望这可以帮助。
关于asp.net-mvc - 我在哪里可以在 Orchard 模块中初始化 AutoMapper 映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13985267/