【发布时间】:2017-06-13 11:12:34
【问题描述】:
我需要从构造函数中注入我在 Setup 中声明的所有内容。
我能做到吗?如何从构造函数中注入服务? 类似于 Angular 2 中的 Injector 服务。
在控制器中没有构造函数的情况下注入服务
类似的东西
public class ControllerBase : Controller
{
protected IRepository<Test> _test;
protected IRepository<Test1> _test1;
protected IRepository<Test2> _test2;
public ControllerBase(INJECTOR injector)
{
_test = injector.inject(IRepository<Test>);
_test1 = injector.inject(IRepository<Test1>);
_test2 = injector.inject(IRepository<Test2>);
}
}
public class SomeController : ControllerBase
{
public SomeController(INJECTOR injector)
: base(injector)
{
}
}
感谢@Rick van den Bosch 的回答
对于那些仍然无法得到我想要的东西的人:
public class ControllerBase : Controller
{
protected IRepository<Test> _test;
protected IRepository<Test1> _test1;
protected IRepository<Test2> _test2;
public ControllerBase(IServiceProvider injector)
{
_test = injector.GetService<IRepository<Test>>();
_test1 = injector.GetService<IRepository<Test1>>();
_test2 = injector.GetService<IRepository<Test2>>();
}
}
public class SomeController : ControllerBase
{
public SomeController(IServiceProvider injector)
: base(injector)
{
//HERE I HAVE ALL 3 REPO NOW WITHOUT EXTRA LINES
}
}
public class SomeController1 : ControllerBase
{
public SomeController1(IServiceProvider injector)
: base(injector)
{
//HERE I HAVE ALL 3 REPO NOW WITHOUT EXTRA LINES
}
}
【问题讨论】:
-
我能做到吗?如何从构造函数中注入服务?
-
我知道 DI 是如何工作的以及如何注册服务,但它只能在构造函数中注入......我需要注入它。
-
不是中间件,它是关于注入的,我需要在没有控制器中的构造函数的情况下注入服务
-
其实可以通过控制器动作方法参数注入。只需在前面添加
[FromServices]即可。 -
thx juunas 实际上我需要类似的东西,但作为变量,我正在编写基本控制器,我想注入默认服务而不在构造函数中声明它们
标签: c# asp.net-core asp.net-core-mvc .net-core