Мне нужно иметь возможность обслуживать дополнительные методы в моем универсальном контроллере, если контроллер реализует определенный интерфейс или имеет дополнительный атрибут или что-то в этом роде.Вот что у меня сейчас:
public abstract class AnimalController
{
[HttpPost]
public void Walk() { }
}
public class DogController : AnimalController
{
[HttpPost]
public void Bark() { }
}
public class CatController : AnimalController
{
[HttpPost]
public void Mew() { }
}
public class MutantController : DogController
{
[HttpPost]
public void Mew() { }
}
Mutant
должен иметь способности как Dog
, так и Cat
, но C # не позволяет делать
public class MutantController : DogController, CatController
{
}
IИнтересно, что является лучшим способом решить эту проблему в контексте WebAPI?По сути, мне нужно добавить дополнительные веб-методы в зависимости от определенных способностей.Одним из решений является сделать что-то вроде этого:
public abstract class AnimalController
{
[HttpPost]
public void Walk() { }
}
public class DogController : AnimalController, ICanBark
{
[HttpPost]
public void Bark() { }
}
public class CatController : AnimalController, ICanMew
{
[HttpPost]
public void Mew() { }
}
public class MutantController : AnimalController, ICanMew, ICanBark
{
[HttpPost]
public void Bark() { }
[HttpPost]
public void Mew() { }
}
Это приведет к большому количеству дополнительного кода.Я подумал, может быть, некоторые добавят методы динамически, чтобы WebAPI знал, как использовать дополнительный контроллер, когда я размещаю атрибуты в главном?Или обрабатывает через методы по атрибуту?
[CanMew]
[CanBark]
public class MutantController : AnimalController
{
}