2016-10-29 01:35:15 +08:00
---
2017-07-01 07:47:15 +08:00
title: Dependency Injection in requirement handlers
2016-10-29 01:35:15 +08:00
author: rick-anderson
2017-11-02 03:34:09 +08:00
description: This document outlines how to inject authorization requirement handlers into an ASP.NET Core app using dependency injection.
2016-10-29 01:35:15 +08:00
ms.author: riande
manager: wpickett
ms.date: 10/14/2016
ms.topic: article
2016-11-17 08:24:57 +08:00
ms.technology: aspnet
2017-03-03 08:50:36 +08:00
ms.prod: asp.net-core
2016-10-29 01:35:15 +08:00
uid: security/authorization/dependencyinjection
---
# Dependency Injection in requirement handlers
2017-10-14 04:50:30 +08:00
< a name = "security-authorization-di" > < / a >
2016-10-29 01:35:15 +08:00
2017-11-01 04:42:12 +08:00
[Authorization handlers must be registered ](policies.md#handler-registration ) in the service collection during configuration (using [dependency injection ](../../fundamentals/dependency-injection.md#fundamentals-dependency-injection )).
2016-10-29 01:35:15 +08:00
2017-11-02 03:34:09 +08:00
Suppose you had a repository of rules you wanted to evaluate inside an authorization handler and that repository was registered in the service collection. Authorization will resolve and inject that into your constructor.
2016-10-29 01:35:15 +08:00
2017-08-22 23:48:24 +08:00
For example, if you wanted to use ASP.NET's logging infrastructure you would want to inject `ILoggerFactory` into your handler. Such a handler might look like:
2016-10-29 01:35:15 +08:00
2016-11-18 13:03:07 +08:00
```csharp
2016-10-29 01:35:15 +08:00
public class LoggingAuthorizationHandler : AuthorizationHandler< MyRequirement >
{
ILogger _logger;
public LoggingAuthorizationHandler(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger(this.GetType().FullName);
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
{
_logger.LogInformation("Inside my handler");
// Check if the requirement is fulfilled.
return Task.CompletedTask;
}
}
2016-11-18 13:03:07 +08:00
```
2016-10-29 01:35:15 +08:00
You would register the handler with `services.AddSingleton()` :
2016-11-18 13:03:07 +08:00
```csharp
2016-10-29 01:35:15 +08:00
services.AddSingleton< IAuthorizationHandler , LoggingAuthorizationHandler > ();
2017-11-02 03:34:09 +08:00
```
2016-10-29 01:35:15 +08:00
2016-11-08 01:58:40 +08:00
An instance of the handler will be created when your application starts, and DI will inject the registered `ILoggerFactory` into your constructor.
2016-10-29 01:35:15 +08:00
> [!NOTE]
> Handlers that use Entity Framework shouldn't be registered as singletons.