繁体   English   中英

Unity Container 返回基本类型但不是以前

[英]Unity Container returning base type but wasn't before

我刚刚让我的统一配置工作,我开始使用 web.config 转换器,现在它不会停止返回基本类型。

我已经通过代码确认在我的容器中获取的 mapto 值是正确的类型,一切都表明它应该是派生类型; 但是返回的类型是基础对象。

unity会在某处缓存对象吗? 这是在 IIS Express 中运行以进行测试,这会缓存一些东西吗?

这一切都是在我尝试在 release.config 中测试寄存器元素转换之后开始的(这将修改 MapTo 以返回基本类型)。 不幸的是,一旦我尝试过,即使在我的 web.release.config 文件中删除了转换之后,它也不会返回。

无论如何,我并不完全确定这是问题所在,因为我可以在运行时看到容器对象正在显示正确的 mapto 对象。 关于造成这种情况的任何想法或建议?

我的解析代码:

container.Resolve(Of SqlHelpers)(New ParameterOverride("connectionString", WebHelper.GetCurrentConnectionString))

我的配置代码:

<container>
    <register name="SqlMap" type="SqlHelpers" mapTo="SqlHelpersForTesting">
      <lifetime type="external" />
      <constructor>
        <param name="connectionString">
        </param>
      </constructor>
    </register>
  </container>

我的 dubug 转换代码:

<unity>
<container>
  <add name="SqlMap" mapTo="SqlHelpersForTesting"
       xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</container>

删除了我的发布转换代码,但它是:

<unity>
<container>
  <add name="SqlMap" mapTo="SqlHelpers"
       xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</container>

经过大量调试后,我才发现映射运行不正常; 这是因为我在<register>元素中添加了 name 属性。 文档清楚地显示 name 是一个可选属性,但无论出于何种原因,我的配置都无法使用它。 当我删除它时,一切都处于正常工作状态。 如果有人能告诉我 name 属性发生了什么,那将不胜感激!

编辑:我最好的猜测是 name 属性在 register 元素中不是可选的,用于设置拦截类型映射(因为我在 register 元素中添加了构造函数元素?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM