简单注入器从命名空间注册所有服务

2024-04-17

我的服务接口的命名空间为Services.Interfaces

服务接口的实现有一个命名空间Web.UI.Services

例如,我有 2 个服务实现

  • IUserService 需要注册到UserService
  • ICountryService 需要注册到CountryService

这就是我目前使用 SimpleInjector 注册这些服务的方式。

container.Register<IUserService, UserService> ();
container.Register<ICountryService, CountryService> ();

问题:如果我有超过 100 个服务,那就有点夸张了。我需要为每项服务添加一行。

如何使用简单注入器将一个程序集的所有实现注册到另一程序集的所有接口?


您可以通过使用 LINQ 和反射查询程序集并注册所有类型来完成此操作:

var registrations =
    from type in typeof(UserService).Assembly.GetExportedTypes()
    where type.Namespace.StartsWith("Services.Interfaces")
    where type.GetInterfaces().Any()
    select new { Service = type.GetInterfaces().Single(), Implementation = type };

foreach (var reg in registrations) {
    container.Register(reg.Service, reg.Implementation);
}

这是描述的here http://simpleinjector.readthedocs.io/en/latest/advanced.html#batch-registration.

如果我有超过 100 个服务就有点夸张了。我需要去添加 每项服务都有一行。

如果是这样的话,我会认为你的设计有问题。您致电您的服务这一事实IUserService and ICountryService表明您违反了单一职责 https://en.wikipedia.org/wiki/Single_responsibility_principle, 打开关闭 https://en.wikipedia.org/wiki/Open/closed_principle and 接口隔离原则 https://en.wikipedia.org/wiki/Interface_segregation_principle。这可能会导致严重的可维护性问题。

对于替代设计,请查看these https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91 two https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=92文章。所描述的设计允许更高级别的可维护性,使注册服务变得更加容易,并使应用横切关注点变得轻而易举(尤其是使用简单注入器)。

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

简单注入器从命名空间注册所有服务 的相关文章

随机推荐

  • 在 Javascript 变量中存储密码有哪些安全隐患?

    我正在开发一个需要良好安全性的网络应用程序 在目前的设计中 许多用户操作需要用户重新发送密码 否则服务器将不得不以纯文本形式存储密码 至少暂时如此 许多用户交互是通过 AJAX 请求进行的 我不想让用户重新输入每个密码 而是想做这样的事情
  • 有谁知道即使页面已刷新,如何保留 Javascript 变量?

    Example 在主页中单击一个按钮 新 然后页面将使用 Javascript 在新窗口中打开新页面 调用重定向 Page 在主页中单击一个按钮 退出 然后页面然后会调用 确认退出 然后 closeChildWindows 关闭所有 在重定
  • 什么算作失败?

    假设我有一个伪 C 程序 For i 0 to 10 x a 2 x 5 next 30 FLOPS 的 FLOP 数量是 1 x 1 x 5 1 2 x 5 10 loop 吗 我很难理解什么是失败 请注意 指示我从何处获取 操作 计数
  • 在 PHP 中生成独特的组合

    我需要从给定的数据集 n 个数字 生成唯一的组合 每个组合都包含 r 值 基本上希望实施C n r n r n r PHP 中的公式 输入数据集 A B C D 并需要 3 个值的唯一组合 如下所示 C n r C 4 3 4 3 4 3
  • 如何在Java中使绘制的图像透明

    我让动画在我的 蛇克隆游戏 中发挥作用 但基于图片的问题是图像没有透明度 注意圆形图片的白色背景 编程方面 是否有解决方案能够使这些绘制的图像包含透明度 这是一张包含我的代码和程序输出的图片 附 顺便说一句 我决定粘贴直接链接而不是 IMG
  • Grails 命令对象:如何将 request.JSON 加载到其中?

    Question 有没有办法使用 request JSON 数据进行自动命令对象绑定 在我的 grails 控制器中给出这个简单的 Command 对象 class ProfileCommand int id String companyN
  • 从匿名类调用新定义的方法

    我实例化了一个匿名类的对象 并向其中添加了一个新方法 Date date new Date public void someMethod 我想知道是否可以从外部调用此方法 类似于 date someMethod 好问题 答案是否定的 您不能
  • 2015年如何从lfd安装mod_wsgi

    我如何从 lfd 网站安装 mod wsgi 因为它有轮扩展 每当我搜索如何在 wamp 上安装 mod wsgi 时 资源都会告诉我从该网站安装二进制文件 然后将 mod wsgi so 文件保留在我的 wamp 目录中 lfd 页面上有
  • 如何为nodejs生成调用图?

    跟进如何为给定的 JavaScript 生成调用图 https stackoverflow com questions 10182387 它被关闭了 因为它需要关注 只有一个问题 所以这是我的重点 如何为我的 Node js Javascr
  • Flex:获取自己的 SWF 文件名?

    有没有办法以编程方式确定我的类正在运行的 swf 文件名 Thanks Stage http livedocs adobe com flex 3 langref flash display Stage html has a 加载器信息 ht
  • 如何使用 --timid 标志来覆盖鼻子

    我想使用运行 nosetests with coverage 内德 巴切尔德 Ned Batchelder 的报道模块 http nedbatchelder com code coverage 但将 timid 标志传递给覆盖模块 有没有办
  • 如何轻松编写克隆方法?

    我有一个带有虚拟克隆新方法的基类 class A virtual A cloneNew const return new A 及其衍生物 class A1 public A virtual A1 cloneNew const return
  • 观察 NSUserDefaults 键的值更改

    我对保存在 NSUserdefaults 中的特定键的值变化感兴趣 然而 我所拥有的并不适合我 observeValueForKeyPath 不会被触发 更新 我想我已经发现了这个问题 如果我使用字符串 而不是使用定义的常量 那么它就会被触
  • 如何在 iOS 13 中以编程方式隐藏和显示状态栏?

    我制定了以下隐藏和再次显示状态栏的常用方法 它在 iOS 13 之前工作正常 但当我在 iOS 13 或更高版本的设备上运行它时 我遇到了崩溃 void showStatusBar BOOL show UIView statusBar UI
  • 如何在运输方式(后端)中添加自定义描述字段

    我想在运输方式下的运输区域页面中添加一个自定义字段 它将是一个文本输入 用户将能够添加自定义消息 我将在前端显示该消息 我注意到它将数据保存在wp woocommerce shipping zone methods没有任何额外列来保存数据的
  • Log4Net 或 NLog(或其他记录器)是否有办法以执行堆栈嵌套 XML 或 JSON 格式输出日志?

    Log4Net 或 NLog 或其他记录器 中是否有一种方法可以以执行堆栈嵌套 XML 或 JSON 格式输出日志 这样 if 函数A calls B 7 那个叫C something 它会输出类似以下内容
  • Django Rest Framework 中的视图集“创建”自定义分配值

    想设置一个自定义用户的用户名通过使用输入电子邮件 但在哪里进行自定义分配 在视图中 同时它也接收一个文件 模型 py class CustomUser AbstractUser avatar models ImageField max le
  • 用一条线绘制每年的时间序列数据

    我有一个包含 20 多年股票数据的数据框 Open High Low Close Adj Close Volume Date 2001 01 02 1 062500 1 089286 1 040179 1 062500 0 930781 1
  • 检查类模板是否已实例化?

    有没有一种简单的方法可以查看一个类是否已在翻译单元中实例化 C Primer 中的一个练习询问每个带标签的语句 是否发生实例化 template
  • 简单注入器从命名空间注册所有服务

    我的服务接口的命名空间为Services Interfaces 服务接口的实现有一个命名空间Web UI Services 例如 我有 2 个服务实现 IUserService 需要注册到UserService ICountryServic