servicestack with funq - 按照惯例自动装配

2024-03-07

我有一个在其构造函数中采用 IMyDependency 的服务。 IMyDependency、MyDependency 和服务都位于同一个程序集中。 MyDependency 有一个单一的、公共的、无参数的构造函数。

令我惊讶的是,这不起作用:

container.RegisterAutoWired<IMyDependency>();

它抛出“System.NullReferenceException”。

如果我这样做,它会起作用:

container.RegisterAutoWiredAs<MyDependency, IMyDependency>();

但是,这也是如此:

container.RegisterAs<MyDependency, IMyDependency>();

那么区别是什么呢?如果“自动装配”找不到具体的实现,并且对于需要依赖的服务能否解决也没有影响,那么什么是自动装配呢?

Funq 应该能够按照约定找到您的具体实现吗?如果是这样,如果不是同名,那么该约定是什么?

Thanks.


您的意思是“如何实现一个解决方案来搜索程序集并根据约定自动在 ServiceStack IOC 中注册类?”

如果是这样,我可能会给你一个解决方案:

  1. 创建一个可注入类将实现的接口。
  2. 让您的可注入类实现该接口。
  3. 在引导代码中,使用反射来搜索程序集并获取实现可注入接口的所有类的列表。
  4. 使用反射根据您的约定获取类名和接口。
  5. 调用ServiceStack IOC方法注册自动连线类型并传入类和接口来注册它们。

例如,如果我们的命名约定是 ClassName IClassName:

private static void RegisterCustomTypes(Container container)
{
  //Get the Assembly Where the injectable classes are located.
  var assembly = Assembly.GetAssembly(typeof(IInjectable));

  //Get the injectable classes 
  var types =assembly.GetTypes()
    .Where(m => m.IsClass && m.GetInterface("IInjectable") != null);

  //loop through the injectable classes
  foreach (var theType in types)
  {
    //set up the naming convention
    var className = theType.Name;
    var interfaceName = string.Concat("I", className);
    //create the interface based on the naming convention
    var theInterface = theType.GetInterface(interfaceName);
    //register the type with the convention
    container.RegisterAutoWiredType(theType, theInterface);
  }
}

public interface IInjectable
{

}

//This class can be injected
public interface ITestManager : IInjectable
{
    void Execute(int id);
}

public class TestManager : ITestManager
{
    public void Execute(int id)
    {
        throw new System.NotImplementedException();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

servicestack with funq - 按照惯例自动装配 的相关文章

  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • 自定义 Visual Studio 2008 中的位置栏

    有人成功定制了 VS 2008 的 Places Bar 吗 我从 VS 2005 进行的自定义设置并没有转移到 2008 显然 并且无论我如何处理注册表 我都无法使我的自定义位置出现在 打开 对话框中 我已经阅读并应用了相关的MS KB文
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐

  • VS Image Watch 扩展 natvis 用于 BITMAPINFOHEADER?

    Visual Studio 的图像观察扩展 http goo gl TRe0X http goo gl TWre0X 允许您在调试时查看内存中的位图 非常有用 但是我一直试图定义一个 natvis 文件以允许查看 DIB 或 BITMAPI
  • 为什么performGC无法释放所有内存?

    鉴于该计划 import Language Haskell Exts Annotated from haskell src exts import System Mem import System IO import Control Exc
  • 注入 DAO 的 @Transactional 的 Spring WS 拦截器不起作用

    我们有一个基于 XML 的传统配置 spring ws 应用程序 其中包含端点拦截器 这些端点拦截器已注入 DAO 以从数据库获取配置 这些 DAO 注入了 hibernate sessionFactory 当我们升级到 spring 4
  • 将 SQLite 客户端数据库与 MySQL 服务器数据库同步

    我已经在 xcode 中使用 sqlite3 创建了一个应用程序 我想创建一个名为sync 的按钮来与我的服务器中的 mysql 数据库同步 关于同步过程有什么建议吗 请告诉我 好吧 您意识到这是一个不小的问题 去年 我为一个商业应用程序编
  • 日志文件存在于日志目录中,但在未启用日志功能的情况下启动

    我已经开始学习 MongoDB 并尝试将其安装在 Ubuntu 上 我最近从 Windows 转移到 Ubuntu 面临问题开始sudo service mongodb start 以下是日志 Sun Aug 4 20 25 36 774
  • 在 ViewPager 中多次使用一个 Fragment

    是否可以在视图分页器中多次使用一个片段 我正在尝试使用 ViewPager 构建动态更新的 UI 我想使用相同的设计 基本上是相同的片段 每个页面都有不同的数据 就像列表视图适配器一样 您可以为 ViewPager 中的每个页面实例化相同的
  • 如何获取在 iOS 示例应用程序中使用的图层名称? (张量流)

    我对 Tensorflow 非常陌生 我正在尝试使用 inception v3 网络来训练一些东西 以便在 iPhone 应用程序中使用 我设法将图表导出为协议缓冲区文件 手动删除 dropout 节点 我希望是正确的 并将该 pb 文件放
  • Android locationManager requestLocationUpdates 不起作用

    我正在开发一个应用程序 其中列出了距离用户最近的餐馆 单击刷新按钮后 它会列出用户当前位置的餐馆 我使用位置管理器并仅在活动进入前台 onResume 时请求更新 以避免持续使用电池 当应用程序进入 onPause 时 位置更新将停止 当我
  • 如何以及是否值得集成 Java Webapp + drools + Guvnor?

    我计划引入 Java 规则 目前正在评估 Drools 以从应用程序中外部化 物理上和逻辑上 业务规则 由于这些业务规则通常由企业制定 因此我希望企业通过 GUI 对规则进行必要的更改 我在 Google 上搜索了关于集成 java web
  • 更改 tvOS 上 SwiftUI 中按钮的颜色

    我正在尝试更改 SwiftUI 的颜色Button在电视操作系统上 修改background几乎可以工作 除了你可以看到底层UIButton实际上是在背景顶部使用圆形半透明图像 这会导致矩形背景位于圆形图像之外的角落处出现不同的颜色 Add
  • 如何在从url加载的ImageView中淡入图片

    我想对 ImageView 应用淡入动画 以创建从 url 加载的图像在下载完成时淡入的效果 我知道如何将图像从 url 下载到 ImageView 例如这个答案 https stackoverflow com questions 2471
  • 如何通过 Reasoning 实现 Apache Jena 中命名空间之间的映射?

    Goal 我不想在本体之间实现基于规则的映射 以完成数据迁移的常见任务 实现目标的方式 为了实现这一点 我开发了一个抽象数据结构 它能够存储任何数据类型的 xml 表示形式提供的所有信息 然后我编写了一个解析器 它根据目标文档类型定义构造了
  • 获取远程日志,而不是提交

    如何在不获取更改 提交的情况下获取远程日志 我只想查看日志 看看自上次以来是否有任何新的更改pull 基本上可以避免stash or commit我的改变先 git 帮助文件有这个例子 它以倒置的形式应该给出我想要的结果 git log m
  • WPF 中带有标题的边框

    有谁知道如何在 WPF 中获得带有标题的边框 即网络浏览器显示 标签的方式 有没有一种简单的方法 比如设置属性 或者我必须制作一个 ControlTemplate 也许是一个GroupBox http msdn microsoft com
  • 使用 JUnit 比较 ArrayList 是否相等的简单方法?

    使用 JUnit 比较 ArrayList 是否相等的简单方法是什么 我需要实现相等接口吗 或者有一个简单的 JUnit 方法可以使它更容易吗 对于列表相等性 您无需执行任何特殊操作 只需使用assertEquals即可 ArrayList
  • Python __enter__ / __exit__ 与 __init__ (或 __new__)/ __del__

    我已经搜索过 但找不到任何使用 python 的充分理由 enter exit 而不是 init or new del 我明白那个 enter exit 旨在与使用with作为上下文管理器的声明 以及with声明很棒 但与之相对应的是 这些
  • 如何循环关闭容器

    我有一个产品列表 我想在产品 Feed 中展示广告 我想要类似的东西 div div Bla div div Bla div div Bla div div div Adsense Stuff div div div Bla div div
  • 如何正确使用温斯顿

    我已阅读使用winston 包登录node js 的文档 我的问题 我是否需要将日志模块添加到需要的每个页面logging 还是温斯顿以某种方式拦截console log and console error 谢谢你的时间 通常 您需要在使用
  • jquery 使用 html5 模式进行验证

    如何使 jQuery 验证 支持 HTML 5 模式 如果不需要在每个字段上指定模式 那就太好了 我知道我可以做到这一点 如下 但是有更好的方法吗 form validate rules password pattern A Za z0 9
  • servicestack with funq - 按照惯例自动装配

    我有一个在其构造函数中采用 IMyDependency 的服务 IMyDependency MyDependency 和服务都位于同一个程序集中 MyDependency 有一个单一的 公共的 无参数的构造函数 令我惊讶的是 这不起作用 c