将参数传递给已具有依赖项注入的服务



我有一个具有以下构造函数的服务

public TokenService(UserManager<IdentityUser> userManager, ApplicationDbContext dbContext)
{
_userManager = userManager;
_dbContext = dbContext;
}

在启动中.cs我已经注册了服务:

services.AddScoped<TokenService>();

我想向构造函数添加一个字符串参数,并将字符串传递给我在 Startup 中注册服务的服务.cs

我知道您可以通过在注册期间创建新实例来传递参数,但我不知道在手动执行此操作时如何传递 UserManger 和 ApplicationDbContext 对象。

如果我这样做:

services.AddScoped<>(_ => new TokenService(null , null, "secret");

它不适用于其他服务的依赖项注入。

作为一种解决方法,我在程序中添加了带有方法的字符串.cs但想删除它。

通常,当您想为也需要注入依赖项的东西提供参数时,您最终会创建一个工厂。但是,在这种情况下,由于参数在注册期间是已知的,因此您可以轻松解决此问题,直接注册工厂方法:

services.AddSingleton(serviceProvider => new TokenService(serviceProvider.GetRequiredService<UserManager<IdentityUser>>(), serviceProvider.GetRequiredService<ApplicationDbContext>(), "hello"));

在您的评论中,您指出这不能是单例,这与工厂方法无关紧要,就像注册瞬态一样容易,例如:

services.AddTransient(serviceProvider => new TokenService(serviceProvider.GetRequiredService<UserManager<IdentityUser>>() , serviceProvider.GetRequiredService<ApplicationDbContext>(), "hello"));

希望这有帮助

最新更新