using System.Threading.Tasks;
public static async Task Main()
await test.UpdateUserStatus(1, 2, () => new MyContext());
public async Task UpdateStatus<TService, T>(int id, int status, Func<TService> serviceCreator)
where TService : StatusService<T>
await serviceCreator().UpdateStatus(id, status);
public async Task UpdateUserStatus(int id, int status, Func<MyContext> contextProvider)
await UpdateStatus<UserService, User>(id, status, () => new UserService(contextProvider()));
public abstract class StatusService<T>
protected StatusService(MyContext context)
Console.Write("StatusService<T> constructor called for type " + typeof(T).FullName);
public abstract Task UpdateStatus(int id, int status);
public class UserService : StatusService<User>
public UserService(MyContext context) : base(context)
public override async Task UpdateStatus(int id, int status)