Ваш IsAliveHandler
не может иметь никаких аргументов конструктора (это ограничение вашей прикладной среды).
Вместо этого вы должны сделать IsAliveHandler
a Humble Object исчитайте это частью вашего корня композиции .
Это означает, что вы извлекаете всю интересную логику из IsAliveHandler
(например, в IsAliveService
) и меняете IsAliveHandler
начто-то вроде следующего:
public class IsAliveHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
Bootstrapper.Container.GetInstance<IsAliveService>().Process(context);
}
}
Другими словами, единственное, что вы позволяете IsAliveHandler
делать, это запрашивать службу из контейнера DI и вызывать соответствующий метод для этой разрешенной службы.
Обратите внимание, что IsAliveHandler
должен оставаться полностью без сохранения состояния: разрешение IsAliveService
нигде не должно храниться.Вы должны оставить его до контейнера DI, чтобы предоставить вам правильный экземпляр.
В случае, если эта операция выполняется вне контекста простого инжектора Scope
, вы можете заключить операцию в такой Scope
:
public void ProcessRequest(HttpContext context)
{
using (AsyncScopedLifestyle.BeginScope(Bootstrapper.Container))
Bootstrapper.Container.GetInstance<IsAliveService>().Process(context);
}