在Windsor中注册组件而不指定接口可以吗?

2023-12-19

在 Windsor 中注册组件而不指定接口是否被认为是不好的形式? IE。

container.Register(Component.For<MyClass>().LifeStyle.Transient);

相对于...

container.Register(Component.For<IMyClass>().ImplementedBy<MyClass>().LifeStyle.Transient);

我了解编写接口而不是具体实现的好处,但是我们发现现在有很多接口,其中许多接口位于实际上只有一个实现的类上。


是的,注册没有接口的组件是可以的,但是不是因为你给出的原因.

具体的依赖关系

组件可能依赖于具体的类。例如,对于实体框架,消费者应该将 ObjectContext 注入其中。这是一个仍然需要注入的具体类,因为它应该是shared多个消费者之间。

因此,给定一个消费者的构造函数如下:

public FooRepository(FooObjectContext objectContext)

您需要像这样配置容器:

container.Register(Component.For<FooObjectContext>());

Foo 存储库不请求任何接口因此注册一个接口是没有意义的(即使有一个接口可用),但您仍然必须注册具体类,因为 Windsor 可以只解析显式注册的类型.

仅具有一种实现的接口

那么只有一种实现的接口又如何呢?消费者再次决定需求。

想象一下消费者有这个构造函数:

public Ploeh(IBar bar)

温莎城堡能够解决 Ploeh 的唯一方法是注册 IBar。即使 Bar 是 IBar 的唯一实现,这行不通:

container.Register(Component.For<Bar>());

这不起作用,因为 IBar 从未注册。 Castle Windsor 并不关心 Bar 实现 IBar,因为它不想代表您变得聪明。你必须明确地告诉它:

container.Register(Component.For<IBar>().ImplementedBy<Bar>());

This maps酒吧到酒吧。

注册接口和具体类型

那么如果您希望能够同时解析具体类型和接口怎么办?

上一个示例的问题在于,它可以让您解析 IBar,但不能解析 Bar。

您可以使用 Forward 方法或 For 的多泛型重载来转发注册:

container.Register(Component.For<Bar, IBar>().ImplementedBy<Bar>());

这可以让你解决both酒吧和 IBar。

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

在Windsor中注册组件而不指定接口可以吗? 的相关文章

  • AngularJS:服务、提供商、工厂

    之间有什么区别Service Provider and Factory在 AngularJS 中 从我得到的 AngularJS 邮件列表一个惊人的线程 https groups google com forum msg angular 5
  • Windsor 解决问题 - ASP.NET Core Web API .Net 版本 6 无法注册我的 .Net Framework 4.8 C# 库程序集

    我正在尝试在我的 Web API 项目中解析我的组件 我正在使用此代码片段进行注册 它在我的 UnitTest 项目中运行良好 程序 cs var builder WebApplication CreateBuilder args Add
  • 从 EntityManagerFactory 连接 EntityManager 的问题

    我知道 spring 有它自己的 JPA 对象工厂 但我想让它按原样工作 从那里我将研究最佳实践 我只是处于理解过程中 这是我尝试为其生成 bean 的实际代码 EntityManagerFactory emf Persistence cr
  • 如何使用 Ioc Unity 注入依赖属性

    我有以下课程 public interface IServiceA string MethodA1 public interface IServiceB string MethodB1 public class ServiceA IServ
  • 如何在未附加到应用程序模型的类中使用 eclipse 4 DI?

    我创建了一个带有声明性服务的 OSGI 服务来注入实现接口的对象 如果我将对象注入到附加到应用程序模型 处理程序 部分 的类中 它就可以正常工作 如果我将它注入到未附加到应用程序模型的类中 它总是返回 null 是否可以在未附加到应用程序模
  • 需要 WCF 的完整 DI 示例

    有人有完整且有效的 WCF DI 示例吗 Every http www eggheadcafe com tutorials aspnet b428fb65 08b4 45c8 97cd 47ee1a1eaf41 composing wcf
  • 依赖注入容器——工厂模式

    我一直在尝试了解依赖注入 并一直在阅读并尝试编写一个类似于以下内容的小型依赖注入容器 http fabien potencier org article 12 do you need a dependency injection conta
  • 注入包含接口的所有已注册实现的 Enumerable

    给出以下接口 public interface IMyProcessor void Process 我希望能够注册多个实现 并让我的 DI 容器将它们的可枚举注入到这样的类中 public class MyProcessorLibrary
  • 如何动态实例化服务?

    我有一个Utils服务很重 我想在特定的用户操作中使用其中定义的一些函数 由于这项服务很重 我想延迟实例化它 在用户操作时 我该如何实现这一目标 Service module service Utils function dep1 dep2
  • 使用 asp.net mvc 4 的简单注入器,从另一个程序集加载控制器

    我正在开发一个 asp net mvc 4 站点 使用 Simple Injector 作为 Ioc 工具 这将是一个可插拔的架构 某些控制器和视图位于另一个程序集中 另一个 mvc4 应用程序 Plugin Web dll 从主应用程序中
  • 传统 3 层架构与带 IOC 的 3 层架构

    我正在构建一个包含表示层 PL 业务逻辑层 BLL 和数据访问层 DAL 的 3 层架构 传统的 3 层架构逻辑指出 BLL 应充当 PL 和 DAL 之间的中介 PL 甚至不应该知道数据库的存在 而 DAL 不应该知道 BLL 或 PL
  • 私有只读接口 - 它是多余的吗?

    我在我的项目中使用 IoC 和 DI 但是我想知道以下是否是一个好的做法 private readonly IMyService myservice 作为服务使用者的类内的字段 该字段在构造函数中设置 我确信我在某处见过这个并且我已经注意到
  • Hilt:java.lang.ClassNotFoundException:找不到类“com.kotlin20test.Hilt_MyApp”

    我有一个错误关于Hilt 我一直在尝试注入我使用创建的改造界面Hilt 这是错误 java lang ClassNotFoundException Didn t find class com kotlin20test Hilt MyApp
  • 在 ASP.NET Core 的中间件中注入服务

    我想根据 HTTP 标头值注入服务 所以我有 2 个类 DbDataProvider 和 InMemDataProvider 它们都是从 IDataProvider 实现的 每当进行 API 调用时 客户端都会传递一个标头 该标头确定是需要
  • 使用spring自动装配时如何传递构造函数参数?

    我们的项目使用 spring DI IoC 所以我使用自动装配来注入 beans 程序在实例化期间需要将参数传递给对象 并且参数是在运行时 而不是在编译时 知道的 如何在使用自动装配时实现这一点 示例代码如下 界面 IMessage pac
  • 如何使用 Unity 动态注册通用类?

    我有一个包含很多类 300 和 BaseClass 的程序集 我想用接口注册一个泛型类 统一后 您必须在 Name如果你想解析接口的对象数组 我想要一个对象数组主视图模型自动地 有没有办法通过反射来自动执行此操作 有什么建议么 示例 伪 p
  • DI Control-Freak 反模式:难以理解

    我正在阅读 Mark Seemann 写的 NET 中的依赖注入 但我无论如何也无法理解这一点 虽然new当涉及到 VOLATILE 时 关键字是一种代码味道 依赖性 您无需担心将其用于稳定 依赖性 这new一般来说 关键字不会突然变得 非
  • 使用编译时编织进行依赖注入? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我只是想了解 PostSharp 老实说我认为它太棒了 但有一件事对我来说很难如何纯依赖注入 不是服务定位器 无法完成 https cod
  • 将存储库接口作为参数传递给域类上的方法是否被认为是糟糕的设计?

    我们的领域模型现在非常贫乏 我们的实体大多是空壳 几乎纯粹是为了保存值和导航到集合而设计的 我们正在使用 EF 4 1 代码优先 ORM 到目前为止的设计是为了让我们的新手开发人员在早期迭代期间查询上下文时免受可怕的 LINQ to Ent
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下

随机推荐