我有一个我想尝试与dto联系的枚举:
public enum DtoSelection { dto1,dto2,dto3,}
此枚举中有108个和值.
我为这些dto中的每一个都有一个dto对象:
public class dto1 : AbstractDto { public int Id { get; set; } //some stuff specific to this dto }
我正在尝试创建一个方法(最终是一个服务),它将返回一个与所讨论的dto相关联的类型的新dto对象:
private AbstractDto(int id) { if (id == DtoSelection.Dto1.ToInt()) //extension method I wrote for enums return new Dto1(); if (id == DtoSelection.Dto2.ToInt()) return new Dto2(); }
显然我不想这样做108次.无论出于何种原因,我的大脑只是遗漏了一些明显处理这个问题的最佳方法是什么.
解决方法
只要在与AbstractDto相同的命名空间中定义Dto类,此类就可以执行您想要的操作(如果不是,则需要调整它):
鉴于以下枚举和类:
public enum DtoSelection { Dto1,Dto2,Dto3,} public abstract class AbstractDto { } public class Dto1 : AbstractDto { } public class Dto2 : AbstractDto { } public class Dto3 : AbstractDto { }
这种方法将解决它们:
public static class DtoFactory { public static AbstractDto Create(DtoSelection dtoSelection) { var type = Type.GetType(typeof(AbstractDto).Namespace + "." + dtoSelection.ToString(),throwOnError: false); if (type == null) { throw new InvalidOperationException(dtoSelection.ToString() + " is not a known dto type"); } if (!typeof(AbstractDto).IsAssignableFrom(type)) { throw new InvalidOperationException(type.Name + " does not inherit from AbstractDto"); } return (AbstractDto)Activator.CreateInstance(type); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。