Один из способов достижения этого - для всех служб реализовать общий интерфейс:
public interface IAccountRemovalService<T>
{
void RemoveAccount<T>(T model);
}
public class ServiceA : IAccountRemovalService<ServiceA_AccountDataModel>
{
public void RemoveAccount<ServiceA_AccountDataModel>(ServiceA_AccountDataModel model)
{
}
}
public class ServiceB : IAccountRemovalService<ServiceB_AccountDataModel>
{
public void RemoveAccount<ServiceB_AccountDataModel>(ServiceA_AccountDataModel model)
{
}
}
Чтобы это работало, вам нужно что-то общее между каждым из типов вашей модели, например базовый класс, такой как AccountModelDataBase
:
public class ServiceA_AccountDataModel : AccountDataModelBase {}
public class AccountDataModelBase {}
Как только вы это получите, становится возможным переписать ваше свойство CurrentService
следующим образом:
public IAccountRemovalService<AccountDataModelBase> CurrentService
{
get
{
IAccountRemovalService<AccountDataModelBase> returnedValue = null;
switch (CurrentServiceEnum)
{
case ServiceType.ServiceA:
returnedValue = IoC.ServiceA as IAccountRemovalService<AccountDataModelBase>;
break;
case ServiceType.ServiceB:
returnedValue = IoC.ServiceB as IAccountRemovalService<AccountDataModelBase>;
break;
case ServiceType.ServiceC:
returnedValue = IoC.ServiceC as IAccountRemovalService<AccountDataModelBase>;
break;
}
return returnedValue;
}
}
Это включает в себя довольно много изменений в вашем коде, добавление интерфейса и базового класса, но это дает вам некоторое преимущество, поскольку теперь вы можете гарантировать (благодаря добавлению новых членов в IAccountRemovalService), что все ваши Реализации службы, которые имеют метод RemoveAccount
, остаются в состоянии блокировки по отношению к методам, которые они реализуют.
Одна небольшая заметка о том, что свойство, которое вы включаете, называется CurrentServiceEnum
, не совсем правильно из-за суффикса Enum
, которое, вероятно, стоит рассмотреть, но это просто мое мнение! =)