Преимущества использования Binder для IPC в Android

Руководство по интеграции показывает, как использовать HttpModule для инициализации HttpHandlers . Однако HttpModule не создается для каждого запроса; он создается один раз для приложения и регистрируется в событиях HttpApplication, когда вызывается его метод инициализации.

Поскольку модуль является одноэлементным, вы не должны вводить зависимости в свой модуль. Вы должны разрешать зависимости для каждого запроса, а поскольку HttpModule не может быть настроен и не является собственной зависимостью, вам нужно будет вернуться в контейнер из вашего HttpModule. Другого выхода нет, но здесь нужно свести к минимуму количество необходимого кода. Пример:

public class UsersOnlineModule : IHttpModule
{
    public void Init(HttpApplication context) {
        context.PreRequestHandlerExecute += (s, e) => {
            var handler = Global.GetInstance();
            handler.Handle();
        };
    }
}

В этом примере UsersOnlineModule делает не что иное, как разрешение одной отдельной службы и вызов ее метода на ней. Эта служба (UsersOnlineHandler в этом случае) должна отображать всю необходимую логику и зависимости. Другими словами, ваш HttpModule становится Humble Object , и вся логика извлекается в UsersOnlineHandler:

public class UsersOnlineHandler
{
    private readonly ITenantStore tenantStore;
    private readonly ICacheManager cm;

    public UsersOnlineHandler(ITenantStore tenantStore, ICacheManager cm) {
        this.tenantStore = tenantStore;
        this.cm = cm;
    }

    public void Handle() {
       // logic here
    }
}

ПРЕДУПРЕЖДЕНИЕ: Убедитесь, что хранить любые зависимости в поля класса или экземпляра или свойства вашего HttpModule, потому что это может привести к тому, что зависимость станет Captive Dependency . Вместо этого, как описано выше, просто разрешите, используйте и забудьте об этой зависимости, все внутри этого вызова метода. Не храните его.

16
задан Onik 24 March 2018 в 23:34
поделиться