NET核心:如何将多个服务注入控制器



如果我误解了一些基本的东西,请耐心等待,但是。。。

假设一个控制器需要几个依赖注入的服务,比如DBContext、AutoMapper,或者其他一些注册的服务(当然是在Startup类中正确注册的(,这可能吗?

单一注入服务的伪代码:

class MyController 
{
private DBContext _context;
MyController(DBContext context)
{
_context = context;
}    
}

但如果我需要几个服务,比如(同样只是伪代码(:

class My2ndController 
{
private DBContext _context;
private IMapper _mapper;
private SomeConfig _config;
My2ndController(DBContext context, IMapper mapper, SomeConfig config)
{
_context = context;
_mapper = mapper;
_config = config;
}    
}

这可能吗?

是的,您只需要确保在Startup.cs中注册您的服务。

在ConfigureServices方法中:

public void ConfigureServices(IServiceCollection services)
{
// . . . code above
services.AddTransient<IMapper, Mapper>();
/// . . . code below
}

现在,任何需要IMapper接口的控制器都将在创建时传递给Mapper类。

此外,只要知道除了瞬变之外还有其他的生命。例如Singleton,其中该类只能有一个实例。

最新更新