Ответ 1
Я использую Automapper в своих WCF-сервисах для сопоставления сущностей базы данных с контрактами данных. Для каждой службы я создаю статический класс AutomapBootstrap с методом InitializeMap. Затем для каждой службы я украшаю службу атрибутом AutomapServiceBehavior.
Я не знаю, будет ли это работать для вашего сценария, потому что службы данных WCF немного отличаются от сервисов и сервисов WCF WCF SOAP с использованием WCF WebBindings.
Однако его стоит посмотреть.
Это поведение службы
[CoverageExclude(Reason.Framework)]
public sealed class AutomapServiceBehavior : Attribute, IServiceBehavior
{
public AutomapServiceBehavior()
{
}
#region IServiceBehavior Members
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase,
Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
AutomapBootstrap.InitializeMap();
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
#endregion
}
Это мой картограф
public class AutomapBootstrap
{
public static void InitializeMap()
{
Mapper.CreateMap<CreateBookmarkRequest, TagsToSaveRequest>()
.ForMember(dest => dest.TagsToSave, opt => opt.MapFrom(src => src.BookmarkTags))
.ForMember(dest => dest.SystemObjectId, opt => opt.UseValue((int)SystemObjectType.Bookmark))
.ForMember(dest => dest.SystemObjectRecordId, opt => opt.Ignore());
}
}
вот как я подключаю свою службу к automap
[AutomapServiceBehavior]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Clouds : ICloudService
{
// service operation implementation details elided
}
Заключительное примечание: моя служба - ванильная служба WCF, использующая WebBinding и обслуживающие данные в стиле REST.