2013-03-06 32 views
1

我試圖配置我的對象映射器而不知道我正在使用哪個映射器。 :/配置非特定框架的映射行爲

這聽起來有點奇怪。原因在於我正在嘗試使用洋蔥體系結構,因此我的UI無法知道位於我的基礎結構中的Object Mapper。一個例子見this solution

Onion Architecture

我有一些麻煩搞清楚如何我應該「代表的」無默認映射行爲。 東西,如:

Mapper 
    .CreateMap<MyModel, MyDestViewModel>() 
    .ForMember(
     dest => dest.SomeDestinationProperty, 
     opt => opt.MapFrom(src => src.SomeSourceProperty) 
    ); 

我設置一類在我的MVC項目,該項目是從Global.asax中調用,這是我想要配置我的映射。

public static class MapConfig 
{ 
    public static void RegisterMaps() 
    { 

    } 
} 

我在想我可以做下面的事情。 (IMapper是一個位於域中的自定義接口)

public static void RegisterMaps(HttpConfiguration config) 
{ 
    var mapper = config.DependencyResolver.GetService(IMapper); 
    mapper.CreateMap<MyModel, MyViewModel>(); 
} 

現在......我將如何設置特殊行爲,如.ForMember?請記住,它不能是AutoMapper特定的。

我沿着這些線路mapper.CreateMap<MyModel, MyViewModel>(Expression<Func<T>>)其中Func鍵會做一些黑魔法我想不通現在:(思考的東西 - 我在正確的道路上或有我錯過了什麼重要的

回答

11

洋蔥架構ISN? 「T有關配置是實現無關,它是關於執行

剛剛創建的映射執行的IMapper接口,但不用擔心配置。這適用於你的ORM,國際奧委會容器和其他一切。

此外,洋蔥體系結構不是關於項目結構,而是關於您的依賴關係的方向。只需在您的用戶界面中調用CreateMap。然後,您可以在Core中一直定義一個IMapper接口,其他部分實現一個委託給AutoMapper的版本。

+1

如果我誤解了你,我很抱歉。但是我應該用AutoMapper中需要的函數1:1映射創建一個IMapper? – 2013-03-07 12:12:40

+0

是的,但沒有CreateMap調用。僅限地圖通話。這將像抽象你的ORM配置,這不是明智的。 – 2013-03-07 12:33:01

+0

對,我只是幾乎從IMappingEngine c/p。也許當我更熟悉它時,這個http:// lostechies。com/jimmybogard/2009/05/12/automapper-and-ioc /將開始變得更有意義:) – 2013-03-07 12:44:53

3

您正在抽象出有用的功能,這會比您最初意識到的花費更多的時間。爲什麼不花時間選擇一個映射器並堅持使用它?

爲什麼你的UI不知道你的映射器如此重要?假設您使用的是MVC,那麼您將會展示大量您選擇的映射器功能,從而將我們的域模型扁平化以查看模型。

它是人們使用通用資源庫實現的同一種廢話,以防萬一他們決定切換ORM中間項目。

仔細選擇您的基礎設施並堅持下去。