vendredi 11 septembre 2020

Factory function from base type to derived type

I'm trying to implement a factory function that accepts a base type and returns a new generic class with a derived type depending on what type the base type is, like so:

public IStaffingEventValidator<T> GetValidator<T>(T staffingEvent)
        {
            switch (staffingEvent)
            {
                case HireEvent ev:
                    return (IStaffingEventValidator<T>)new HireEventValidator();

                default:
                    return null;
            }
        }

The problem is that type T is a base StaffingEvent, and HireEventValidator is of type IStaffingEventValidator<HireEvent>, where HireEvent is a StaffingEvent.

I know this is not working because of covariance and contravariance, my question is how should I rather be implementing something like this? Is this a bad design? I have a list of StaffingEvents and want to create a validator using the derived type for each of them.

Aucun commentaire:

Enregistrer un commentaire