Utilizo Automapper en mi WCF Services para mapear desde entidades de bases de datos a contratos de datos. Para cada servicio, creo una clase estática de AutomapBootstrap con un método para InitializeMap. Luego, para cada servicio, decorar el servicio con un atributo AutomapServiceBehavior.
No sé si esto funcionará para su escenario porque WCF Data Services es un poco diferente de los servicios y servicios vainilla WCF SOAP usando WCF WebBindings.
Sin embargo, vale la pena mirar.
Este es el comportamiento en servicio
[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
}
Este es mi asignador
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());
}
}
así es como puedo conectar mi servicio a AutoMAPA
[AutomapServiceBehavior]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Clouds : ICloudService
{
// service operation implementation details elided
}
Nota final, mi servicio es un servicio de WCF de vanilla que utiliza los datos de WebBinding y que sirven en un estilo de estilo REST.
Fragmento de código muy útil, podría mejorarse si pudiera incluir los espacios de nombres necesarios. Me llevó más tiempo descubrirlos que comprender el código. – Chris
¿qué objetos/espacios de nombres fueron los más confusos? – CedricB
Los espacios de nombres necesarios son System.ServiceModel, System.ServiceModel.Channels, System.ServiceModel.Description y System.Collections.ObjectModel –