.Net Core 依赖注入从构造函数中注入

2023-11-21

我需要从构造函数中注入我在安装程序中声明的所有内容。

我可以做吗?如何从构造函数中注入服务? 类似于 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
    }
}

您可以将服务作为参数注入到操作方法中。这是通过用属性标记参数来完成的[FromServices].

这看起来像这样:

public IActionResult About([FromServices] IDateProvider dateProvider)
{
    ViewData["Message"] = $"Current date is {dateProvider.CurrentDate}";

    return View();
}

如果您正在寻找 BaseController 中的默认服务:您可以采用以下几种方法:

1.仍然使用构造函数
这看起来像这样:

public class HomeController : BaseController
{
    public HomeController(IDateProvider dateProvider) : base(dateProvider)
    {
    }
}

and

public class BaseController
{
    protected IDateProvider _dateProvider;

    protected BaseController(IDateProvider dateProvider)
    {
        _dateProvider = dateProvider;
    }
}

这样,IDateProvider 可用于 BaseController 和所有继承的 Controller。

2. 手动解决服务
这样您就可以手动解决该服务。这可以在 BaseController 中,并且仅在您需要它们时(懒惰)。欲了解更多信息,请参阅这个帖子.

为了简单性和可读性,我可能会选择构造函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.Net Core 依赖注入从构造函数中注入 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 字典的 pop() 的非破坏性版本

    是否有任何习惯用法可以从字典中获取任意键 值对而不删除它们 P3K EDIT 抱歉措辞混乱 我使用任意这个词的意思是我不关心我得到什么 它与随机不同 在随机中我确实关心我得到什么 即 我需要每个项目被选择的概率相同 而且我没有钥匙可以使用
  • perl 将单个变量封装在双引号中

    在 Perl 中 是否有任何理由将单个变量封装在双引号中 无连接 我经常在我正在开发的程序的源代码中找到这一点 由不再在这里工作的人在 10 年前编写 my sql host something my sql user somethinge
  • RabbitMQ 客户端负载均衡

    我正在驾驶rabbit mq 发现它非常好 查看 HA 页面 我发现交换 队列复制运行良好 我对必须使用 TCP 负载均衡器来平衡节点之间的负载这一事实感到困扰 它是否正确 我希望集群中有 2 个节点 并采用 全部复制 策略 我希望发布者或
  • 什么可能导致浏览器控制台中出现“jsf 未定义”错误

    你好 我在 Tomcat 6 上得到了一个基于 MyFaces 2 0 11 和 Primefaces 3 0 的简单新项目 当我尝试导航到某个页面时 我得到Uncaught ReferenceError jsf is not define
  • ActiveRecord 在 Heroku 上错误加载二进制字段,在 OSX 上正常

    我有一个 Rails 3 1 应用程序 它将图像存储在 postgresql 数据库的二进制字段中 我知道在数据库中存储图像存在潜在问题 但现在必须这样做 在 OSX 上的开发模式和规范中 本地一切正常 但在部署到 Heroku 的应用程序
  • 每次点击时触发相同的 CSS 动画

    我试图触发 CSS 动画 onclick 但每次单击后都会重新启动 我知道我可以打开和关闭动画 但我想在每次单击按钮时触发动画 另外 最初 CSS 动画不应运行 仅在单击时运行 这是我的笔 http codepen io omarel pe
  • Rails 3 和奇怪的 Accept 标头

    我的 Rails 3 网站受到带有奇怪接受标头的爬虫的攻击 触发异常 例如 ActionView MissingTemplate occurred in home show 以下是一些导致问题的接受标头 text application j
  • 有关使用 MVC 进行桌面应用程序开发的推荐书籍 [已关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找有关桌面上 MVC 的书籍推荐 如果他们使用 Java 那就是一个好处 一些背景 我正在用 Java 编写一个桌面应用程序 它是一个音频应
  • 如何按照 kedro 管道中声明的顺序运行节点?

    在 Kedro 管道中 节点 类似于 Python 函数 是按顺序声明的 在某些情况下 一个节点的输入是前一节点的输出 然而 有时 当在命令行中调用 kedro run API 时 节点不会按顺序运行 在 kedro 文档中 它说默认情况下
  • 可以在 git hook 内自定义 GIT_COMMITTER_DATE 吗?

    我想手动控制 git 提交时间戳 以便我的 GIT COMMITTER DATE 始终与 GIT AUTHOR DATE 匹配 我见过许多使用过滤器分支重写历史的解决方案 但我宁愿积极主动地将逻辑放在 git hook 中 以便它始终匹配未
  • SQL标签列表和标签过滤

    我有一个 SQL 数据库 其中存储用户和与用户关联的标签 多对多关系 我有经典的模式users table tags表和 桥 表usertag它将用户与标签链接起来 users table Id Name 1 Alice 2 Bob 3 C
  • 从任务<>获取对象

    我有以下方法 private async Task
  • Android 重定向不起作用

    我需要在 javascript 文件中重定向到用户指定的给定 URI 一个简单的例子 我是如何做到这一点的 function redirect uri if navigator userAgent match Android i docum
  • Excel 用户窗体显示的大小错误

    我在使用 Excel UserForms 时遇到一个非常奇怪的问题 当我通过单击工作表中的命令按钮来显示表单时 表单的大小会显着变形 使其基本上无法使用 下图说明了这一点 Form before size warping intended
  • Python 中的不可排序类型错误是什么意思?

    from urllib request import urlopen page1 urlopen http www beans r us biz prices html page2 urlopen http www beans r us b
  • Django CSRF 验证失败。请求中止。- CSRF cookie 未设置

    我知道这个问题以前已经被问过 我几乎尝试了人们给出的所有选项 但我似乎无法解决它 我是一个完全的新手 所以请让我知道我哪里出错了 我正在尝试编写一个简单的原始表单 到目前为止 我还没有实现任何身份验证或会话机制 但从我所读到的内容来看 这与
  • 在 64 位 Windows 上运行 cURL

    我是 cURL 的新手 刚刚安装它 但它似乎只做它感觉像的事情 我使用的是从这里获得的 64 位版本 http curl haxx se latest cgi curl win64 ssl sspi我在这里找到了安装说明 http guid
  • 如何使用Fiddler监听asp.net开发服务器(即cassini)?

    我正在尝试使用 Fiddler 调试 RESTful WCF 应用程序 我通过 VS IDE 运行我的项目 它在 ASP NET 开发服务器 又名 Cassini 中启动我的应用程序 然后 我启动 Fiddler 并在 请求生成器 选项卡中
  • C 语言最佳实践中的项目组织

    我想知道组织大型 C 项目的最佳实践是什么 它是一个专业项目 而不是开源项目 可能存储在 Git 存储库中 事情应该如何排序 结构应该去哪里 什么时候应该使用附加到结构的函数而不是使用结构作为参数的函数 就在项目中布置文件而言 应该如何组合
  • .Net Core 依赖注入从构造函数中注入

    我需要从构造函数中注入我在安装程序中声明的所有内容 我可以做吗 如何从构造函数中注入服务 类似于 Angular 2 中的 Injector 服务 在控制器中无需构造函数即可注入服务 像这样的东西 public class Controll