public EntityHandler( IActiveHandler <TEntity> activateHandler, IAddHandler <TEntity> addHandler, IRemoveHandler <TKey> removeHandler) { ActivateHandler = activateHandler ?? throw new ArgumentNullException(nameof(activateHandler)); AddHandler = addHandler ?? throw new ArgumentNullException(nameof(addHandler)); RemoveHandler = removeHandler ?? throw new ArgumentNullException(nameof(removeHandler)); }
// This method must require T to be IModel because IAddHandler<T> requires // T to be IModel. public static void ValidateHandler <T>(IAddHandler <T> handler) where T : IModel { handler.GetData(); var result = handler.Add(); // IModel inherits from IResult. Hence, anything that implements IModel // must implement IResult. So this is an implicit cast, even though IResult // is implemented explicitly. WriteResults(result); }