[英]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.