Reputation: 829
I am new to .NET Core and I got stuck on this.
In my startup.cs
, I have
services.AddScoped<IEmailService, EmailService>();
and I have created a IHostedService
:
services.AddHostedService<CooldownExpiredService>();
inside my CooldownExpiredService
, I have the following code
using (var emailScope = _serviceScopeFactory.CreateScope())
{
var _emailService = emailScope.ServiceProvider.GetService<EmailService>();
}
but the object I get is null. How can I get the EmailService
inside from HostedService
?
Upvotes: 2
Views: 3868
Reputation: 41
You can add Extension Method for all Services first : add class =>
public static class ServiceTool
{
private static IServiceProvider ServiceProvider { get; set; }
public static IServiceCollection Create(IServiceCollection servicesProvider)
{
ServiceProvider = servicesProvider.BuildServiceProvider();
return servicesProvider;
}
public static T Resolve<T>()
{
return ServiceProvider.GetService<T>();
}
}
And go to the Startup and add it
ServiceTool.Create(services);
For use in controller write on constructor controller example:
_logRepository = ServiceTool.Resolve<ILogRepository>();
Upvotes: 1
Reputation: 829
i dont knwo why i should have use the interface.
emailScope.ServiceProvider.GetService<IEmailService>()
Upvotes: 4