在这里,我将 IRepository<Network> 服务添加到服务容器,然后该类AdminController
使用它。这个实现是反模式吗локатор сервисов
?
public void ConfigureServices(IServiceCollection services)
{
...
services.AddTransient<IRepository<Network>, EFRepository<Network>>();
...
}
public class AdminController : Controller
{
private readonly IRepository<Network> _dbContext;
public AdminController(IRepository<Network> dbContext)
{
_dbContext = dbContext;
}
}
不。这不是“服务定位器”。“服务定位器” - 当你将容器拖入依赖项时,即表单的代码
使用这种方法,仅通过查看类定义无法知道 AdminController 正在使用 IRepository。您将必须进入源代码并研究整个类的主体(您永远不知道从定位器中提取服务的位置)。
同时,如果您具有显式依赖项,并且 DI 容器只是填充这些依赖项(但不会删除自身),那么这是正确的方法。