Ich verwende Automapper in meinen WCF-Services, um von Datenbank-Entities zu Datenverträgen zu mappen. Für jeden Dienst erstelle ich eine statische AutomapBootstrap-Klasse mit einer Methode zu InitializeMap. Dann dekoriere ich den Dienst für jeden Dienst mit einem AutomapServiceBehavior-Attribut.
Ich weiß nicht, ob dies für Ihr Szenario funktioniert, da WCF Data Services ein wenig anders ist als WCF-WCAP-SOAP-Dienste und -Dienste, die WCF-Webbindungen verwenden.
Allerdings ist es einen Blick wert.
Dies ist der Dienst Verhalten
[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
}
Das ist mein Mapper
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());
}
}
das ist, wie ich meinen Dienst verdrahten Automap
[AutomapServiceBehavior]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Clouds : ICloudService
{
// service operation implementation details elided
}
Schlussbemerkung: Mein Dienst ist ein WCF-Dienst von Vanilla, der WebBinding verwendet und Daten im Stil von REST ausliefert.
Sehr nützliches Code-Snippet, könnte besser gemacht werden, wenn Sie die erforderlichen Namespaces einschließen könnten - es dauerte länger, um diese herauszufinden, als den Code zu verstehen. – Chris
Welche Objekte/Namespaces waren am verwirrendsten? – CedricB
Die erforderlichen Namespaces sind System.ServiceModel, System.ServiceModel.Channels, System.ServiceModel.Description und System.Collections.ObjectModel. –