Как и в других ответах, вы можете просто передать класс в качестве параметра классу, не являющемуся контроллером, и инжектор зависимостей передаст его вам.
public class EmailActivaitonKey
{
private readonly IActivationService _activationService;
public EmailActivaitonKey(IActivationService service)
{
this._activationService = service;
}
....
}
Если вам нужен только один экземпляр сервиса для всего приложения, вы добавляете сервис как Singleton в ConfigureServices
services.AddSingleton<IActivationService, ActivationService>();
Вам не нужно создавать статическую переменную для экземпляра, так как объект 'ServiceProvider', т.е. объект services
, будет держать его для вас.
EDIT
Вы можете передать класс EmailActivationKey в качестве параметра другому классу, и DI внедрит его для вас, например,
public class EmailClass
{
private readonly EmailActivationKey _key;
public EmailClass(EmailActivationKey key)
{
_key = key;
}
}
Если вы хотите новый каждый раз, измените services
обратный вызов на scoped, например
services.AddScoped<EmailActivationKey>();
DI создаст для вас новый запрос для каждого запроса.