WebApp.Start<TStartup> Тип метода Параметр

При настройке приложения-службы Windows для самостоятельного размещения с использованием Owin на основе этой статьи:

http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

Я использовал эту перегрузку метода WebApp.Start:

Метод WebApp.Start (строка)

Вот мой код:

//(in startup method) 
_server = WebApp.Start<Startup>(BaseAddress);

public class Startup
{
    // This code configures Web API. The Startup class is specified as a type
    // parameter in the WebApp.Start method.
    public void Configuration(IAppBuilder appBuilder)
    {
        // Configure Web API for self-host. 
        var config = new HttpConfiguration();
        config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new
        {
            id = RouteParameter.Optional
        });

        appBuilder.UseWebApi(config);
    }
} 

Работает нормально, поэтому нареканий нет.

Но каковы требования к параметру type метода Start? Похоже, что у него нет никаких ограничений, и я не смог найти никакой документации о том, каковы мои параметры / требования к этому параметру. Ищет ли он методы, которые принимают IAppBuilder в качестве параметра? Что если я поменяю имя метода Configuration() на другое? Что если я сделаю метод внутренним? Есть ли другие варианты, которые я могу настроить с этим классом?

Где все это зафиксировано? Я чувствую, что без статьи, указанной выше, я бы никогда не смог понять, что реализовать.

1 ответ

WebApp класс использует отражение, чтобы получить указатель на Configuration(IAppBuilder) Затем метод вызывает его. Если класс, указанный вами в качестве аргумента универсального типа, не имеет Configuration метод с ожидаемыми аргументами, то вы получите ошибку во время выполнения.

Я согласен, что это не так легко обнаружить, как хотелось бы, и я не уверен, почему разработчики оригинала реализовали его таким образом, вместо добавления where T: IStartup ограничение вместо. Это не только сделает его более доступным для обнаружения без документации, но также позволит компилятору проверить это во время компиляции.

Единственным преимуществом этого подхода является то, что разработчики OWIN могут добавлять больше методов или методов с разными сигнатурами в будущем, не нарушая существующий код.

Другие вопросы по тегам