2015-12-21 73 views
0

我正在使用Dapper Extensions在配置爲使用Structuremap的MVC應用程序中構建存儲庫。對於其中一個模型,我需要創建一個自定義映射來忽略一個字段。如何使用Structuremap設置Dapper擴展自定義映射?

public class ServiceMapper : ClassMapper<Service> 
{ 
    public ServiceMapper() 
    { 
     //Ignore this property entirely 
     Map(x => x.IsRunningNormally).Ignore(); 

     //optional, map all other columns 
     AutoMap(); 
    } 
} 

現在要調用這個映射器,我需要設置它,我在我的存儲庫的構造函數中調用這行代碼。

  DapperExtensions.DapperExtensions.DefaultMapper = typeof(ServiceMapper); 

只要我打這條線,Structuremap嘗試解析式,並拋出異常我:

ServiceMonitor.Infrastructure.ServiceMapper不是GenericTypeDefinition。 MakeGenericType只能在Type.IsGenericTypeDefinition爲true的類型上調用。

我不確定這個錯誤意味着什麼以及如何解決它?任何人都可以請指導我這裏發生了什麼?

回答

2

好了,終於找出問題所在。問題在於,默認情況下,DapperExtensions將在與您的Model POCO類相同的程序集中掃描您編寫的任何自定義映射器。在我的情況下,它是DataTransferObjects程序集。

我的映射器類存在於Repository程序集中,它與DTOs程序集不同。

我要告訴小巧玲瓏的擴展掃描此大會自定義映射:

DapperExtensions.DapperExtensions.DefaultMapper = typeof (ServiceMapper); 

// Tell Dapper Extension to scan this assembly for custom mappings 
DapperExtensions.DapperExtensions.SetMappingAssemblies(new[] 
{ 
    typeof (ServiceMapper).Assembly 
}); 

一旦我設置了上面的一樣,我的代碼開始工作。這在任何地方都沒有記錄,並花了我一段時間才弄清楚。希望它能幫助其他人解決同樣的問題。

+0

[鏈接到官方文檔](https://github.com/tmsmith/Dapper-Extensions/wiki/Customized-mapping-for-a-class) –