Как я могу установить версию API на универсальном контроллере при загрузке плагина? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть несколько плагинов, которые в основном являются определениями типа ввода и вывода. У меня есть универсальный контроллер, который я могу добавить в конвейер MVC. Все работает отлично.

но у меня проблемы с установкой версии API на этом универсальном контроллере. Я знаю, что вы можете установить это на основе атрибута в верхней части класса контроллера. Но так как вы не можете этого динамического (атрибута) не допустить, у меня нет возможности установить версию для каждого экземпляра универсального контроллера.

В настоящее время я просто компилирую контроллер для каждого экземпляра во время выполнения и регистрирую его с помощью компилятора Roslyn.

есть ли способ установить api-версию где-то в конвейере регистрации контроллеров в конвейере mvc и завершения с разными конечными точками версий api.

1 Ответ

0 голосов
/ 29 июня 2019

Этого можно достичь с помощью API Conventions .Он был разработан для поддержки именно этого типа сценария:

https://github.com/microsoft/aspnet-api-versioning/wiki/API-Version-Conventions

Это будет работать только на closed-generics , но это не должно быть слишком много работычтобы это произошло.Вот несколько основных примеров:

// typed, closed generic
options.Conventions.Controller<GenericController<PlugIn1>>().HasApiVersion(1,0);

// untyped, closed generic
var controllerType = typeof(GenericController<>).MakeGenericType(new []{typeof(PlugIn1)});
options.Conventions.Controller(controllerType).HasApiVersion(1,0);

Вы также можете создавать свои собственные пользовательские соглашения, такие как IControllerConvention .Этот подход может быть использован для версии всех контроллеров, которые наследуются от GenericController<>.Тогда вам просто нужно добавить это к соглашениям, как это:

options.Conventions.Add(new PlugInControllerConvention());

Надеюсь, этого достаточно, чтобы вы начали.Не стесняйтесь задавать больше вопросов.

...