Autofac命名注册构造函数注入

2023-11-27

Autofac是否支持在组件的构造函数中指定注册名称?

示例:Ninject 的NamedAttribute.


您需要使用顶部的 Autofac.Extras.Attributed 包来实现此目的

假设您有一个接口和两个类:

public interface IHello
{
    string SayHello();
}

public class EnglishHello : IHello
{
    public string SayHello()
    {
        return "Hello";
    }
}

public class FrenchHello : IHello
{
    public string SayHello()
    {
        return "Bonjour";
    }
}

然后你有一个消费者类,你想在其中选择注入哪个实例:

public class HelloConsumer
{
    private readonly IHello helloService;

    public HelloConsumer([WithKey("EN")] IHello helloService)
    {
        if (helloService == null)
        {
            throw new ArgumentNullException("helloService");
        }
        this.helloService = helloService;
    }

    public string SayHello()
    {
        return this.helloService.SayHello();
    }
}

注册并解决:

ContainerBuilder cb = new ContainerBuilder();

cb.RegisterType<EnglishHello>().Keyed<IHello>("EN");
cb.RegisterType<FrenchHello>().Keyed<IHello>("FR");
cb.RegisterType<HelloConsumer>().WithAttributeFilter();
var container = cb.Build();

var consumer = container.Resolve<HelloConsumer>();
Console.WriteLine(consumer.SayHello());

注册此类消费者时不要忘记 AttributeFilter,否则解析会失败。

另一种方法是使用 lambda 代替属性。

cb.Register<HelloConsumer>(ctx => new HelloConsumer(ctx.ResolveKeyed<IHello>("EN")));

我发现第二个选项更干净,因为您还避免在项目中引用 autofac 程序集(只是为了导入属性),但这部分当然是个人意见。

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

Autofac命名注册构造函数注入 的相关文章

  • 使用 DbContext 接口注册 AspNetCore 2.1 Identity 系统

    我正在开发 Asp Net Core 2 1 Web Api 我在用Microsoft Extensions DependencyInjection AspNetCore Identity and EntityFrameworkCore 在
  • 简单的注入器和内部构造函数

    我正在开发一个小型类库 并为我的 DI 使用简单注入器 类库有一个访问点 我猜是某种服务 它是public它有一些internal服务和存储库 我看到 Simple Injector 不支持使用内部构造函数进行构造函数注入 例如 我的产品服
  • 创建新实例,同时仍然使用依赖注入

    环境的快速描述 我有一个代表聊天室并依赖于记录器的类 它与具有横切关注点的系统范围记录器不同 而是与特定聊天室绑定的记录器 它将该聊天室中的所有活动记录到其唯一的日志文件中 当聊天室创建时 我想打开日志文件 当聊天室被销毁时 我想关闭日志文
  • CreationException:无法在 Play 2.5.18 中创建注入器错误,以使用 com.google.inject.AbstractModule 替换 GlobalSettings Java 代码

    我正在将 Play 应用程序从 2 5 12 升级到 2 5 18 当我启动该应用程序时 使用sbt 我收到此错误 CreationException 无法创建注入器 看到以下错误 1 Error injecting constructor
  • 获取在 Unity 中实现接口的所有类型

    如果您只想知道解决方案 请跳至更新 我有一个应用程序 它使用以下代码来获取并运行许多工作方法 var type typeof IJob var types AppDomain CurrentDomain GetAssemblies Sele
  • AngularJS:服务、提供商、工厂

    之间有什么区别Service Provider and Factory在 AngularJS 中 从我得到的 AngularJS 邮件列表一个惊人的线程 https groups google com forum msg angular 5
  • Java EE7 中 Qualifier 中的 @Nonbinding 注释的目的是什么?

    我正在阅读CDIJavaEE 7 中的注入特别是使用 Qualifier and Produces注入一个custom Data type变成一颗豆子 我有以下代码取自JBoss 文档 http docs jboss org weld re
  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • Spring 可以理解 @Inject 替换 Weld 作为 JSR-299 实现吗?

    我从几个网页中注意到 Spring 3 0 显然支持来自 JSR 330 的 Inject 由于我们确实希望在 Web 应用程序和独立应用程序的库中使用 JSR 299 语法进行依赖项注入 并且有 Weld 的替代方案 因此如果 Sprin
  • 依赖注入容器——工厂模式

    我一直在尝试了解依赖注入 并一直在阅读并尝试编写一个类似于以下内容的小型依赖注入容器 http fabien potencier org article 12 do you need a dependency injection conta
  • DI 容器、工厂还是临时对象的新容器?

    当处理需要仅在运行时知道的数据的对象 例如用户名和密码 时 对象实例化应该在哪里进行 使用 new 在工厂中还是在 DI 容器中 例如 我可以new一旦我有了数据 就得到一个对象 UserCredentials creds new User
  • 关于存储库的领域驱动设计问题

    我正在尝试实现 DDD 因此我创建了以下类 用户 域模型 UserRepository 管理对象的中央工厂 UserMapper UserDbTable 映射应用程序功能并提供 CRUD 实现的映射器 我的第一个问题是 当模型需要与持久层通
  • 如何注入“运行时”依赖项,例如登录用户,该依赖项在应用程序启动时不可用?

    我只是不明白这个 我在我的 java GWT 应用程序中使用 Gin 来进行 DI 登录屏幕集成到完整的应用程序窗口中 用户登录后 我想将用户对象注入到我创建的其他类 例如 GUI Presenters 中 因此我相信存在某种运行时依赖性
  • Symfony - 自定义验证器和依赖注入

    我正在尝试对自定义验证器使用依赖项注入 以便能够使用实体管理器 我遵循 Symfony 示例 依赖注入 http symfony com doc current cookbook validation custom constraint h
  • 使用 asp.net mvc 4 的简单注入器,从另一个程序集加载控制器

    我正在开发一个 asp net mvc 4 站点 使用 Simple Injector 作为 Ioc 工具 这将是一个可插拔的架构 某些控制器和视图位于另一个程序集中 另一个 mvc4 应用程序 Plugin Web dll 从主应用程序中
  • 设置惰性静态变量首先初始化然后分配?

    我意识到static变量是隐式的lazy 这真的很棒 执行以下操作在第一次调用之前不会创建实例 static var test Test 但是 将一个新实例分配给static变量初始化原始实例 然后分配新实例 这对我来说很麻烦 SomeTy
  • 最终属性 @Value 中的 Spring 属性注入 - Java

    一个关于 Spring 从属性文件注入最终属性的简单问题 我有一个属性文件 我想在其中存储文件路径 通常 当我使用属性文件时 我使用如下内容设置类属性 private Value someProps prop field String so
  • Mediatr 范围问题

    我正在使用 Mediatr 处理来自队列的消息 我可以得到一个简单的例子来工作 但是 当我尝试将对象注入到我的处理程序中时 我遇到了问题 public class MessageCommandHandler IRequestHandler
  • 使用策略和工厂模式进行依赖注入

    我正在开展一个业余项目 以更好地理解控制反转和依赖注入以及不同的设计模式 我想知道是否有将 DI 与工厂和策略模式结合使用的最佳实践 当策略 从工厂构建 需要每个可能的构造函数和实现不同的参数时 我面临的挑战就出现了 因此 我发现自己在服务
  • 在ConfigureServices中注入依赖

    在我的 ASP Net Core 应用程序中 我需要在以下位置注入一些依赖项 在我的例子中是一个存储库 ConfigureServices method 问题是该方法不允许使用多个参数来注入依赖项 该怎么办呢 这是我的代码 public v

随机推荐

  • 如何使用ID删除NDB实体?

    基于此文档https developers google com appengine docs python ndb entities deleting entities好吧 我仍然不确定为什么我不能在 NDB 上进行删除 def get
  • 与 JComponent 相比,在 JPanel 上绘画有什么好处?

    所以在最近的一个回答中 有人评论了这一点 关于绘画 这可能是 90 Swing 程序员的某种毛病 当他们制作自己的组件时 他们总是扩展 JPanel 而不是 JComponent 为什么呢 我对编程还很陌生 所以我认为现在称自己为 Swin
  • 从另一个apk获取资源

    我整天都在为这个问题苦苦挣扎 但没有成功 我基本上是想从另一个应用程序获取图像资源 因此 如果 com example app 在 res 文件夹中有一个名为 image1 png 的图像 我希望 com example2 app 能够访问
  • AutoMapper 将目标对象的属性设置为 null

    我有这样的事情 public class DomainEntity public string Name get set public string Street get set public IEnumerable
  • 将私钥添加到 X509Certificate

    我正在编写一些当前使用 OpenSSL net 为证书签名请求创建公钥 私钥对的代码 该请求配备有公钥并发送到 CA CA 返回签名证书 然后将之前创建的私钥添加到证书中 myCert PrivateKey CryptoKey FromPr
  • 如何从 AWS SAM 获取堆栈输出?

    我想对我的无服务器项目执行自动集成测试 为此 我需要以某种方式获取 api 端点 已经有插件 serverless stack output用于服务于该目的的无服务器框架 但我想知道在部署应用程序后如何通过 AWS SAM 实现类似的目标
  • 客户端向服务器发送延迟的 FIN ACK(约 500 毫秒)

    我有一个 node js 客户端 10 177 62 7 请求来自服务器 10 177 0 1 的 http Rest 服务的一些数据 客户端只需使用node js http request 方法 agent false 客户端位于 Ubu
  • 如何修复“'ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中

    我加载网格视图 网格视图有一个编辑和删除按钮 我点击 编辑 然后我得到 ddlAssignedTo has a SelectedValue which is invalid because it does not exist in the
  • 异常的 C++[Bug]?

    我一直在阅读Exceptional C by Herb Sutter 到达时Item 32 我发现了以下内容 namespace A struct X struct Y void f int void g X namespace B voi
  • 如何使 Playground 执行时间像我们在 iOS 应用程序中运行一样快

    我发现游乐场的执行速度并不可靠 例如使用代码 import UIKit var count 0 let startTime NSDate for i in 1 10000 count let endTime NSDate let inter
  • 将 OpenApi 路径拆分为多个路径定义文件

    我想更轻松地将我的路径 相当多 分割成它们自己的文件 假设我有两条主要路径 user and anotherPath有几个子路径 现在我有了一个 OpenApi 规范文件 其路径被引用到一个索引文件 该索引文件保存对每个路径的引用 用其参考
  • 64 位编译器中的浮点支持

    我们应该对 64 位 Delphi 编译器中的浮点支持有何期待 64位编译器会使用SSE吗 实现浮点运算 64位编译器支持吗 当前80位浮点类型 扩展 这些问题密切相关 所以我将它们作为一个问题来问 我就这个主题发表了两篇文章 here a
  • 如何发布一个空数组(整数)(jQuery -> MVC 3)

    使用 jQuery 我发布了一个数组int通过将数组放入 data 参数中来添加到我的 MVC 3 应用程序 如下所示 data myIntArray myIntArray 在我的控制器中 接收操作有一个参数int myIntArray 这
  • 如何在模型-视图-视图模型架构中的模型方法中间干净地获取用户输入?

    我正在编写一个侦听网络连接的应用程序 当一些数据到达时 它会回复 并且根据传入的数据 它可能需要在回复之前询问用户 显示对话框 我不知道如何在 M V VM 架构中干净地做到这一点 如果我只需要根据传入数据更新 GUI 那么事件和绑定到可观
  • 没有办法在 JavaScript 中拥有基于类的对象吗?

    基于 javascript 原型的面向对象编程风格很有趣 但是在很多情况下您需要能够从类创建对象 例如 在矢量绘图应用程序中 工作区在绘图开始时通常是空的 我无法从现有的 线 创建新的 线 更一般地说 动态创建对象的每种情况都需要使用类 我
  • 如何优雅地关闭嵌入式码头

    我有一个应用程序在嵌入式码头服务器上运行 现在我想启动 停止服务器作为服务 我使用脚本来启动服务器 java JAVA OPTS DREQ JAVA VERSION JAVA VERSION jar myjetty jar 主班 Serve
  • javascript:访问不同框架中的对象?

    如果我在 1 页上有一个框架集的 2 个框架 JS 有没有办法访问相对框架中的元素 Thanks 是的 但前提是两个框架上的页面位于同一域中 你可以做document getElementById frame id contentWindo
  • 如何在 RSS feed 上的 元素中正确放置日期

    我正在使用 RSS Graffitty 将 RSS 项目发布到 Facebook 页面 该应用程序告诉我这些项目缺少发布日期 所以我添加了这个标签 echo
  • 如何使用 Eclipse 处理 Boost.Test 输出

    我正在使用 Eclipse CDT 和 Boost Test 带有 Boost Build 我希望 Eclipse 能够解析构建期间运行测试套件期间生成的 Boost Test 的输出 有人知道如何实现这一目标吗 提前致谢 转至窗口 gt
  • Autofac命名注册构造函数注入

    Autofac是否支持在组件的构造函数中指定注册名称 示例 Ninject 的NamedAttribute 您需要使用顶部的 Autofac Extras Attributed 包来实现此目的 假设您有一个接口和两个类 public int