GomuGomuNoRocket
GomuGomuNoRocket

Reputation: 829

.NET Core 3.1 GetService return null

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

Answers (2)

milad nematpour
milad nematpour

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

GomuGomuNoRocket
GomuGomuNoRocket

Reputation: 829

i dont knwo why i should have use the interface.

emailScope.ServiceProvider.GetService<IEmailService>()

Upvotes: 4

Related Questions