【问题标题】:Setting the parameterless constructor as the injection constructor in container creation将无参构造函数设置为容器创建中的注入构造函数
【发布时间】:2010-12-29 01:43:44
【问题描述】:

我有一堂有两个演员的课。一种无参数,一种有参数。
默认情况下,Unity 会采取贪婪的方法并选择最后一个 ctor。

如何定义要使用的 ctor(我想无参数)而不在我的类中添加对 Unity 的依赖?我认为可以在我的容器创建中做到这一点,但我不知道如何。

目前我的注册条目如下所示:

container.RegisterType<IConfigurationService, SqlConfigurationService>()

更新
我尽量避免使用 XML(配置文件)进行编程。

额外
如何用一个参数注册一个构造函数(反过来应该注入)?
假设 ILoggerService 已经注册,我想使用构造函数

public SqlConfigurationService(ILoggerService logger){}

【问题讨论】:

    标签: c# unity-container ioc-container


    【解决方案1】:

    我认为您也可以在注册时传入一个 InjectionConstructor(包括 ResolvedParameter&lt;T&gt;s 的参数)。你试过吗?

    【讨论】:

      【解决方案2】:

      我现在附近没有 Unity,但据我记得,你可以这样做:

      container.RegisterType<IConfigurationService, SqlConfigurationService>(
          new InjectionConstructor())
      

      【讨论】:

      • 谢谢 :) 你是否也知道如何解决我的额外问题(OP 底部)?
      • 查看 API 文档后的总猜测:container.RegisterType&lt;IConfigurationService, SqlConfigurationService&gt;(new InjectionConstructor(new ResolvedParameter&lt;ILoggerService&gt;()));
      【解决方案3】:

      您可以将 InjectionConstructor 属性应用于您要使用的构造函数。然而,这确实有将一些容器配置从中心位置移开的缺点。

      【讨论】:

      • 我不想在我的实际类中添加任何依赖项(参考 OP)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多