Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static class DtoFactory
- {
- // todo versione 1
- public static EventoDto GetEvento(Evento evento)
- {
- return evento switch
- {
- Evento1 evento1 => Metodo1(evento1),
- Evento2 evento2 => Metodo2(evento2),
- Evento3 evento3 => Metodo3(evento3),
- Evento4 evento4 => Metodo4(evento4),
- Evento5 evento5 => Metodo5(evento5),
- Evento6 evento6 => Metodo6(evento6),
- // altri infiniti eventi e metodi
- _ => throw new Exception("eccezione x")
- };
- }
- private static Evento1Dto Metodo1(Evento1 evento1)
- {
- return new Evento1Dto(
- evento1.EventGuid,
- evento1.EventName,
- evento1.EventType,
- evento1.EventTime
- );
- }
- private static Evento2Dto Metodo2(Evento2 evento2)
- {
- return new Evento2Dto(
- evento2.EventGuid,
- evento2.EventName,
- evento2.EventType,
- evento2.EventTime
- );
- }
- private static Evento3Dto Metodo3(Evento3 evento3)
- {
- return new Evento3Dto(
- evento3.EventGuid,
- evento3.EventName,
- evento3.EventType,
- evento3.EventTime
- );
- }
- private static Evento4Dto Metodo4(Evento4 evento4)
- {
- return new Evento4Dto(
- evento4.EventGuid,
- evento4.EventName,
- evento4.EventType,
- evento4.EventTime
- );
- }
- private static Evento5Dto Metodo5(Evento5 evento5)
- {
- return new Evento5Dto(
- evento5.EventGuid,
- evento5.EventName,
- evento5.EventType,
- evento5.EventTime
- );
- }
- private static Evento6Dto Metodo6(Evento6 evento6)
- {
- return new Evento6Dto(
- evento6.EventName,
- evento6.EventGuid,
- evento6.EventType,
- evento6.EventTime
- );
- }
- // infiniti metodi ed eventi dto da creare
- // todo versione 2
- public static EventoDto GetEventoDto(Evento evento)
- {
- var type = evento.GetType();
- if (_dtoFactories.TryGetValue(type, out var factory))
- return factory(evento);
- throw new NotSupportedException("eccezione x");
- }
- private static readonly Dictionary<Type, Func<Evento, EventoDto>> _dtoFactories = new Dictionary<Type, Func<Evento, EventoDto>>
- {
- [typeof(Evento1)] = e => CreateDefaultDto<Evento1, Evento1Dto>((Evento1)e),
- [typeof(Evento2)] = e => CreateDefaultDto<Evento2, Evento2Dto>((Evento2)e),
- [typeof(Evento3)] = e => CreateDefaultDto<Evento3, Evento3Dto>((Evento3)e),
- [typeof(Evento4)] = e => CreateDefaultDto<Evento4, Evento4Dto>((Evento4)e),
- [typeof(Evento5)] = e => CreateDefaultDto<Evento5, Evento5Dto>((Evento5)e),
- [typeof(Evento6)] = e => CreateDefaultDto<Evento6, Evento6Dto>((Evento6)e)
- // infiniti altri eventi e metodi
- };
- private static TEventoDto CreateDefaultDto<TEvento, TEventoDto>(TEvento evento)
- where TEvento : Evento
- where TEventoDto : EventoDto
- {
- var ctor = typeof(TDto).GetConstructor(new Type[]
- {
- typeof(Guid), typeof(string), typeof(string), typeof(DateTime)
- });
- return (TDto)ctor.Invoke(new object[]
- {
- evento.EventGuid,
- evento.EventName,
- evento.EventType,
- evento.EventTime
- });
- }
- }
- // esempio classe di evento
- public class Evento
- {
- public Guid EventGuid { get; set; }
- public string EventName { get; set; }
- public string EventType { get; set; }
- public DateTime EventTime { get; set; }
- }
- public Class Evento1 : Evento
- {
- public Evento1(Guid eventGuid, string eventName, string eventType, DateTime eventType) : base(eventGuid, eventName, eventType, eventType)
- {
- }
- }
- public Class Evento2 : Evento
- {
- public Evento2(Guid eventGuid, string eventName, string eventType, DateTime eventType) : base(eventGuid, eventName, eventType, eventType)
- {
- }
- }
- // ecc
- //esempio classe evento dto
- public class EventoDto
- {
- public Guid EventGuid { get; set; }
- public string EventName { get; set; }
- public string EventType { get; set; }
- public DateTime EventTime { get; set; }
- }
- public Class Evento1Dto : EventoDto
- {
- public Evento1Dto(Guid eventGuid, string eventName, string eventType, DateTime eventType) : base(eventGuid, eventName, eventType, eventType)
- {
- }
- }
- public Class Evento2Dto : EventoDto
- {
- public Evento2Dto(Guid eventGuid, string eventName, string eventType, DateTime eventType) : base(eventGuid, eventName, eventType, eventType)
- {
- }
- }
- //ecc
Advertisement
Add Comment
Please, Sign In to add comment