加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – ASP.Net Core从另一个控制器调用控制器

发布时间:2020-12-13 20:09:21 所属栏目:百科 来源:网络整理
导读:在我的ASP.Net Core MVC 6解决方案中,我有两套控制器.一组包含具有常规视图的网页.另一组包含API控制器. 为避免重复数据库逻辑,Web控制器正在使用API??控制器.目前我通过将DbContext作为构造函数参数交给它来手动创建所需控制器的实例.这是通过依赖注入赋予W
在我的ASP.Net Core MVC 6解决方案中,我有两套控制器.一组包含具有常规视图的网页.另一组包含API控制器.

为避免重复数据库逻辑,Web控制器正在使用API??控制器.目前我通过将DbContext作为构造函数参数交给它来手动创建所需控制器的实例.这是通过依赖注入赋予Web控制器的DbContext.

但每当我向API控制器添加另一个构造函数参数时,我需要修改使用此API控制器的所有Web控制器.

如何使用内置于ASP.Net 5的依赖注入系统为我创建所需API控制器的实例?然后它会自动填充所需的构造函数参数.

一种解决方案可以是将db逻辑从API控制器移动到单独的层,并从API和Web控制器中调用它.这不会解决我的问题,因为新层仍然需要相同的参数,我不喜欢不必要的布线.

另一种解决方案是让Web控制器通过Web调用访问API,但这只会增加应用程序的复杂性.

今天我这样做:

public IActionResult Index()
{
    using (var foobarController = new Areas.Api.Controllers.FoobarController(
        // All of these has to be in the constructor of this controller so they can be passed on to the ctor of api controller
        _dbContext,_appEnvironment,_userManager,_roleManager,_emailSender,_smsSender))
    {
        var model = new IndexViewModel();
        model.Foo = foobarController.List(new FoobarRequest() { Foo = true,Bar = false });
        model.Bar = foobarController.List(new FoobarRequest() { Foo = false,Bar = true });
        return View(model);
    }
}

我希望这样的事情:
(这个例子不起作用.)

using (var foobarController = CallContextServiceLocator.Locator.ServiceProvider.GetService<Areas.Api.Controllers.FoobarController>())
{
    var model = new IndexViewModel();
    model.Foo = foobarController.List(new FoobarRequest() { Foo = true,Bar = false });
    model.Bar = foobarController.List(new FoobarRequest() { Foo = false,Bar = true });
    return View(model);
}

How can I use the dependency injection system builtin to ASP.Net 5 to create an instance of the required API controller for me?

在你的Startup.cs中可以告诉MVC注册你所有的controllers as services.

services.AddMvc().AddControllersAsServices();

然后,您只需通过DI机制将所需的控制器注入其他控制器并调用其操作方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读