我使用Automapper在我的EF4模型和ViewModels之間進行轉換。 Automapper需要聲明地圖關係,並且我發現自己將其複製/粘貼到每個控制器的構造函數中。ASP.NET MVC 2 Automapper Placement
Mapper.CreateMap<CoolObject, CoolObjectViewModel>();
我在哪裏可以把每一個控制器被實例化時的映射聲明,以他們只會被調用一次,而不是?這可能嗎?
我使用Automapper在我的EF4模型和ViewModels之間進行轉換。 Automapper需要聲明地圖關係,並且我發現自己將其複製/粘貼到每個控制器的構造函數中。ASP.NET MVC 2 Automapper Placement
Mapper.CreateMap<CoolObject, CoolObjectViewModel>();
我在哪裏可以把每一個控制器被實例化時的映射聲明,以他們只會被調用一次,而不是?這可能嗎?
你可以把它的global.asax
的application_start()
目前,我有,我從我的初始化所有映射的調用的Application_Start一個靜態方法。 Library.AutoMapping.RegisterMaps();
AutoMapper.Mapper.CreateMap(typeof(CoolObject), typeof(CoolObjectViewModel));
AutoMapper.Mapper.CreateMap<CoolObject, CoolObjectViewModel>()
.ForMember(d => d.Property1, f => f.MapFrom(s => s.Property1))
.ForMember(d => d.Property2, f => f.MapFrom(s => s.Property2))
.ForMember(d => d.Property3, f => f.MapFrom(s => s.Property3));
所以我的控制器看起來是這樣的。您會注意到HomeController構造函數需要一個IDataContext。我在RequestScope級別註冊了IDataContext和Ninject,併爲我實例化了一個DataContext並注入到了我的控制器中。這是我的請求級別資源庫的來源。
public class HomeController : Controller {
IDataContext dataContext;
public HomeController(IDataContext dataContext) {
this.dataContext = dataContext;
}
}
我對Ninject一個稍微詳細的說明這裏http://buildstarted.com/2010/08/24/dependency-injection-with-ninject-moq-and-unit-testing/
謝謝您的回答。我的地圖依賴於初始化一個類型爲我的EF4表對象之一的存儲庫。我想按照「每個請求」的範圍對存儲庫進行範圍。如果我在我的CRUD操作中使用另一套回購協議,這些地圖是否有效? – John 2010-10-02 02:38:23
這和我正在做的事情差不多。我正在使用Ninject來初始化我的存儲庫,並且我沒有任何映射問題。但是,我使用'Mapper.CreateMap(typeof(CoolOject),typeof(CoolObjectViewModel))' – Buildstarted 2010-10-02 02:48:28
你在哪裏執行repo初始化,以便它是'per http request'? – John 2010-10-02 02:55:58