【问题标题】:Reference XML mappings for UnityUnity 的参考 XML 映射
【发布时间】:2021-05-28 22:01:22
【问题描述】:

以下代码在 3.5.1404 版中有效,但在 5.0.1 版中不再有效。通过 NuGet 获取最新参考:

在 web.config 我有:

using Microsoft.Practices.Unity.Configuration;
using Unity;

namespace ACME.Core
{
    public static class UnityCommon
    {
        static IUnityContainer _container;

        /// <summary>
        /// Returns the Common Unity Container from memory, reloads if not loaded first
        /// </summary>
        /// <param name="forceRefresh">Forces the container to be reloaded in memory</param>
        /// <returns>IUnityContainer</returns>
        public static IUnityContainer GetContainer(bool forceRefresh = false)
        {
            if (_container == null || forceRefresh)
            {
                _container = new UnityContainer();
                _container.LoadConfiguration("Default"));
            }

            return _container;
        }
    }
}

这引用了 web.config 中的 XML 映射,例如:

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <assembly name="ACME.Core" />
    <namespace name="ACME.Core.DTO" />

    <container name="Default">
      <register type="IStatusRepository" mapTo="StatusRepository" />
      <register type="INoteRepository" mapTo="NoteRepository" />
    </container>
</unity>

错误:

System.Configuration.ConfigurationErrorsException 发生 HResult=0x80131902 消息=创建 统一的配置节处理程序:无法加载文件或 程序集“Microsoft.Practices.Unity.Configuration”或其之一 依赖关系。该系统找不到指定的文件。 Source=Unity.Configuration StackTrace:在 Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(IUnityContainer 容器,字符串容器名称)

在 System.Configuration.TypeUtil.GetTypeWithReflectionPermission(IInternalConfigHost 主机,字符串类型字符串,布尔 throwOnError)在 System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.Init(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord) 在 System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.InitWithRestrictedPermissions(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord) 在 System.Configuration.RuntimeConfigurationRecord.CreateSectionFactory(FactoryRecord 工厂记录)在 System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(字符串 configKey, Boolean& isRootDeclaredHere)

我需要以不同的方式调用 XML 配置吗?

顺便说一句,我只用 _container.LoadConfiguration();并收到同样的错误。

【问题讨论】:

    标签: c# .net unity-container


    【解决方案1】:

    在 Github (ENikS) 贡献者的帮助下解决了这个问题。

    我使用的是旧的命名空间问题:

    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
    

    但是一旦我使用了你提供的新的,它就起作用了:

    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
    

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多