C# 通过配置文件向Unity注册类型时出错

C# 通过配置文件向Unity注册类型时出错,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,这是我的配置文件: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>

这是我的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity>
    <containers>
      <container>
        <types>
          <type type="InterfacesLibrary.ICalculator, InterfacesLibrary" mapTo="CalculatorLibrary.Calculator, CalculatorLibrary"/>
          <type type="InterfacesLibrary.ICalculatorReplLoop, InterfacesLibrary" mapTo="CalculatorLibrary.CalculatorReplLoop, CalculatorLibrary"/>
          <type type="InterfacesLibrary.IInputService, InterfacesLibrary" mapTo="InputOutputLibrary.ConsoleInputService, InputOutputLibrary"/>
          <type type="InterfacesLibrary.IOutputService, InterfacesLibrary" mapTo="InputOutputLibrary.ConsoleOutputService, InputOutputLibrary"/>
          <type type="InterfacesLibrary.IInputParserService, InterfacesLibrary" mapTo="CalcCommandParsingLib.InputParserService, CalcCommandParsingLib"/>
        </types>
      </container>
    </containers>
  </unity>
</configuration>
错误消息是:

“System.InvalidOperationException”类型的未处理异常 发生在Microsoft.Practices.Unity.Configuration.dll中

其他信息:类型名称或别名 计算器库。无法解析计算器、计算器库。 请检查配置文件并验证此类型名称

如果在没有配置文件的Main()方法中使用此选项,则它可以正常工作:

container.RegisterType<ICalculator, Calculator>();
        container.RegisterType<IInputService, ConsoleInputService>();
        container.RegisterType<IOutputService, ConsoleOutputService>();
        container.RegisterType<IInputParserService, InputParserService>();
container.RegisterType();
container.RegisterType();
container.RegisterType();
container.RegisterType();

以编程方式注册类时,Visual Studio可以查看硬依赖项,并在编译期间将所有相关程序集复制到输出目录,以便在运行时解析类型

但是,当使用配置时,VisualStudio不知道(软)依赖关系。因此,即使添加了引用,VisualStudio也不会复制配置文件所需的适当程序集,Unity会抛出一个异常,表示它无法解析该类型。i、 e.已复制InterfacesLibrary,但未复制其他实现程序集,因为它们从未在代码中引用

一种解决方案是添加生成后事件,以复制仅通过配置引用的所有必需程序集。另一种方法是在代码中引用程序集,以便VisualStudio看到依赖项并复制程序集。典型的方法如下所示:

// Force copy of soft dependency CalculatorLibrary assembly
private static Type calculatorType = typeof(CalculatorLibrary.Calculator);

谢谢你的回答。然而,我的例子来自这个视频:主要目标是不必使用配置文件引用“CalculatorLibrary”和所有其他库。它只是以某种方式在视频中神奇地工作——您不必引用CalculatorLibrary——您只需确保在运行时部署程序集。你想怎么做就怎么做。e、 硬参考、构建后命令、手动复制、部署脚本等。是的,完全正确。我刚刚检查了bin/debug文件夹,没有CalculatorLibrary.dll。我从以前的版本中手动复制了它,现在它可以工作了。谢谢你的帮助。
container.RegisterType<ICalculator, Calculator>();
        container.RegisterType<IInputService, ConsoleInputService>();
        container.RegisterType<IOutputService, ConsoleOutputService>();
        container.RegisterType<IInputParserService, InputParserService>();
// Force copy of soft dependency CalculatorLibrary assembly
private static Type calculatorType = typeof(CalculatorLibrary.Calculator);