Да, с общей функцией:
public T TrackInstantiation<T>(T entity)
{
Log.BeginRequest(entity, ActionType.Create);
Validate(entity);
WebService.Send(Convert(entity));
Log.EndRequest(entity, ActionType.Create);
// Don't you also need to return the thing to fulfill the method siugnature ?
return entity;
}
Я изменил имя метода, потому что вы не Создаете объект в этом методе (вы передаете уже созданный экземпляр), вы просто проверяете, сохраняете и регистрируете его создание. Кстати, почему бы не создать объект здесь? Тогда это будет близко к шаблону, называемому Abstract Factory .
Вы также можете сделать то же самое, используя интерфейс.
открытый интерфейс ICanBeTracked {/ * нет методов * /}
Измените каждый из типов, которые вы хотите передать этому методу, чтобы они также переопределяли этот интерфейс. Затем просто напишите ваш метод
public ICanBeTracked TrackInstantiation(ICanBeTracked entity)
{
Log.BeginRequest(entity, ActionType.Create);
Validate(entity);
WebService.Send(Convert(entity));
Log.EndRequest(entity, ActionType.Create);
// Don't you also need to return the thing to fulfill the method siugnature ?
return entity;
}
... И сделать перегрузку для каждого из трех методов, вызываемых описанным выше методом, с входным параметром, типизированным как ссылка ICanBeTracked