c# - 使用 Unity XML 配置文件在构造函数中注入(inject)复杂对象

标签 c# xml unity-container

我有以下类声明: Logger Service、FacadeReaderService 和 BusinessManager。我想使用 Unity XML 配置在 BusinessManager 中注入(inject) Logger Service 和 FacadeReaderService。

日志服务

public class LoggerService : ILoggerService
{

}

FacadeReaderService

public class FacadeReaderService : IFacadeReaderService
{
}

商务经理

public class BusinessManager : IBal
    {
        IFacadeReaderService _facadeReaderService;
        ILoggerService _loggerService;

        public BusinessManager(IFacadeReaderService facadeReaderService, ILoggerService loggerService)
        {
            this._facadeReaderService = facadeReaderService;
            this._loggerService = loggerService;
        }
    }

我的问题是如何在我的 BusinessManager 类中注入(inject)这个复杂的对象?下面是我到目前为止在我的 Unity 配置文件中所做的:

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <typeAliases>
    <typeAlias alias="IFacadeReaderService" type="Interfaces.Services.IFacadeReaderService, Interfaces" />
    <typeAlias alias="FacadeReaderService" type="Services.FacadeReader.FacadeReaderService, Services" />

    <typeAlias alias="ILoggerService" type="Interfaces.Services.ILoggerService, Interfaces" />
    <typeAlias alias="LoggerService" type="Services.Log.LoggerService, Services" />


    <typeAlias alias="IBal" type="Interfaces.Bal.IBal, Interfaces" />
    <typeAlias alias="BusinessManager" type="Bal.BusinessManager, Bal" />


  </typeAliases>
    <container>
      <register type="IFacadeReaderService" mapTo="FacadeReaderService" name="FRS"/>
      <register type="ILoggerService" mapTo="LoggerService" name="LS"/>
      <register type="IBal" mapTo="BusinessManager" name="BMS">
      <constructor>
        <param name="facadeReaderService" value="????????" />
        <param name="loggerService" value="??????" />
      </constructor>
      </register>
    </container>
</unity>

最佳答案

好吧,我通过查看 Microsoft 文档找到了问题的答案:https://msdn.microsoft.com/en-us/library/ff660914(v=pandp.20).aspx#config_value

我会发布统一配置,以防万一有人需要它:

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <typeAliases>
    <typeAlias alias="IFacadeReaderService" type="Interfaces.Services.IFacadeReaderService, Interfaces" />
    <typeAlias alias="FacadeReaderService" type="Services.FacadeReader.FacadeReaderService, Services" />

    <typeAlias alias="ILoggerService" type="Interfaces.Services.ILoggerService, Interfaces" />
    <typeAlias alias="LoggerService" type="Services.Log.LoggerService, Services" />


    <typeAlias alias="IBal" type="Interfaces.Bal.IBal, Interfaces" />
    <typeAlias alias="BusinessManager" type="Bal.BusinessManager, Bal" />


  </typeAliases>
    <container>
      <register type="IFacadeReaderService" mapTo="FacadeReaderService" name="FRS"/>
      <register type="ILoggerService" mapTo="LoggerService" name="LS"/>
      <register type="IBal" mapTo="BusinessManager" name="BMS">
        <constructor>
          <param name="facadeReaderService">
            <dependency name="FRS" />
          </param>
          <param name="loggerService">
            <dependency name="LS" />
          </param>
        </constructor>
      </register>
    </container>
</unity>

关于c# - 使用 Unity XML 配置文件在构造函数中注入(inject)复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46666490/

相关文章:

c# - LINQ:在多个左联接之间导航时遇到问题

java - xml的xpath获取节点信息

c# - 从 usercontrol viewmodel 到 customUsercontrol Viewmodel 的 Unity 依赖注入(inject)

c# - Java 与 C# 中的 UTF-16 编码

C# OO 设计问题

c# - 即时格式化 html 日期和数字

java - 如何将 org.apache.xmlbeans.XmlObject 转换为我的 customJavaObject

android - 带有可绘制选择器的 ImageView src 忽略启用状态

c# - 如何在asp.net-core webapi中使用unity-container拦截

c# - 如何将 Unity IoC 容器与 Template10 一起使用?