[英]Restrict custom TypeConverter to a specific assembly
我定義了一個自定義TypeConverter
以及關聯的自定義TypeDescriptionProvider
和TypeDescriptor
以便從REST Web服務返回值(使用ASP.NET Core)時,我的類型自動轉換為字符串。
但是,我現在注意到,在應用程序的其他位置(例如,當我序列化XML以保存配置文件或在WPF中加載XAML時),正在調用我的自定義TypeConverter
。
有沒有一種方法可以限制我的自定義類型轉換器/描述提供程序/描述符,以便僅在我的Web服務程序集中使用它們?
更多信息
我的內部對象沒有使用[TypeConverter()]
屬性來指定要使用的類型轉換器。
作為答案,我正在使用AutoMapper進行從內部對象到數據傳輸對象的映射。 是AutoMapper,它利用TypeDescriptor
/ TypeConverter
將對象的屬性自動映射到字符串。 我希望該行為是只有 AutoMapper 才能使用此自定義類型轉換器。
但是,類型轉換器似乎已在全局注冊: TypeDescriptor.AddProvider(customerProvider, myType)
我看不到將其限制為僅某些組件的方法。 到目前為止,我唯一的想法是以某種方式使用ICustomTypeDescriptor
的GetComponentName()
(但始終看起來為null
)或在單獨的AppDomain
運行我的Web服務器,我假定使用單獨的類型轉換器,但可能會給編組帶來很大的問題/序列化。 還有其他解決方案嗎?
一旦在模型上對屬性進行了硬編碼,則將很難在運行時進行更改/修改/禁用,也無法刪除。 在您的情況下,即使在Web應用程序中,也不能禁用或刪除這些屬性。
我給了您一個選擇, AutoMapper ,多年來我一直在使用它來轉換作業,尤其是對於MVXX模式,無論是ASP.NET MVC還是WPF MVVM,它們都需要將view models
轉換為real models
。 AutoMapper通過配置而不是屬性應用轉換器,這使您的請求成為可能。
https://github.com/AutoMapper/AutoMapper/blob/master/docs/Custom-type-converters.md
Mapper.Initialize(cfg => {
cfg.CreateMap<ModelA, string>().ConvertUsing(new ModelAToStringTypeConverter());
cfg.CreateMap<ModelA, ModelB>().ConvertUsing(new ModelAToBTypeConverter());
cfg.CreateMap<ModelB, ModelA>().ConvertUsing(new ModelBToATypeConverter());
....
cfg.AddProfile<WpfProfile>();
});
public class WpfProfile: Profile
{
public OrganizationProfile()
{
CreateMap<Foo, FooDto>();
// Use CreateMap... Etc.. here (Profile methods are the same as configuration methods)
}
}
如果ModelA的屬性是ModelB的子集,則您甚至不必對轉換器進行硬編碼, cfg.CreateMap<ModelB, ModelA>()
會自動完成操作。
AutoMapper提到了這一點 :
.NET Framework還通過TypeConverter類支持類型轉換器的概念。 AutoMapper在配置檢查和映射中支持這些類型的類型轉換器,而無需任何手動配置。 AutoMapper使用TypeDescriptor.GetConverter方法來確定是否可以映射源/目標類型對。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.