gpt4 book ai didi

c# - 我应该如何将域对象的属性传输到其对应的模型中?

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:19 25 4
gpt4 key购买 nike

我们目前使用扩展方法来提供此功能,但我不禁觉得有更简洁的解决方案。我玩过 AutoMapper,但我不太明白它是如何解决复杂情况下的问题的。对于简单的 1:1,它可以工作,但如果需要对数据进行任何修改——这似乎令人失望。

所以,我有类似的东西:

public static class ProvisioningExtensions
{
// Convert ProvisioningServicesProxy.Provisioning to ProvisioningDetailsModel.
public static ProvisioningDetailsModel ToProvisioningDetailsModel(this Provisioning provisioning)
{
var provisioningDetailsModel = new ProvisioningDetailsModel
{
ID = provisioning.ID,
TaskDeviceID = provisioning.TaskDevice.ID,
ServiceGroupID = provisioning.ServiceGroup.ID,
ServiceID = provisioning.Service.ID,
PatchSchedules = provisioning.PatchSchedules.Select(ps => ps.ToPatchScheduleDetailsModel()).ToList()
};

return provisioningDetailsModel;
}

// Convert ProvisioningDetailsModel to ProvisioningServicesProxy.PatchSchedule.
public static Provisioning ToProvisioning(this ProvisioningDetailsModel provisioningDetailsModel)
{
WorkflowManager workflowManager = new WorkflowManager();
ProvisioningManager provisioningManager = new ProvisioningManager();

TaskDevice taskDevice = workflowManager.GetTaskDeviceByID(provisioningDetailsModel.TaskDeviceID);
Service service = provisioningManager.GetServiceByID(provisioningDetailsModel.ServiceID);
ServiceGroup serviceGroup = provisioningManager.GetServiceGroupByID(provisioningDetailsModel.ServiceGroupID);

var provisioning = new Provisioning
{
ID = provisioningDetailsModel.ID,
TaskDevice = taskDevice,
ServiceGroup = serviceGroup,
Service = service,
PatchSchedules = provisioningDetailsModel.PatchSchedules.Select(ps => ps.ToPatchSchedule()).ToArray()
};

return provisioning;
}
}

ProvisioningDetailsModel 是一个仅包含模型属性的类。没什么特别的。

我考虑过装饰 Provisioning 域对象,以便可以使用它来代替模型,但我决定不这样做。如果我想以两种不同的方式表示供应数据怎么办——如果我使用领域对象本身作为我的模型,这是不可能的。

我还应该考虑哪些其他选择?扩展方法将是我最后的选择——尤其是当我必须在 ToProvisioning 中做相对繁重的工作时。

最佳答案

在 AutoMapper 中,您可以创建类型自定义转换器。这是通过实现 ITypeConverter<> 接口(interface)来完成的。

   public class CreateMomentoCommandToMomentoConverter : ITypeConverter<CreateMomentoCommand, Momento>
{
public Momento Convert(ResolutionContext context)
{
var source = (CreateMomentoCommand) context.SourceValue;
var momento = new Momento {Username = source.Username};

return momento;
}
}

使用 AutoMapper 初始化客户类型转换器

    /// <summary>
/// Configures the aut do mapper.
/// </summary>
public static void ConfigureAutoMapper()
{
AutoMapper.Mapper.Initialize(c=> c.CreateMap<CreateMomentoCommand, Momento>().ConvertUsing(new CreateMomentoCommandToMomentoConverter()));
}

最后映射它。

Mapper.Map<CreateMomentoCommand, Momento>(command);

关于c# - 我应该如何将域对象的属性传输到其对应的模型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13144425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com