- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在将相同的具体类注册到不同的未命名实例时,我们看到 Unity 出现意外行为。在这种情况下,注册似乎以意想不到的方式相互干扰。
独立注册是我们所期望的,但不起作用。似乎 mapTo 类型不是根据注册类型进行管理,而是仅根据 mapTo 类型和注册名称进行管理。我们想了解预期的行为是什么,当前的行为是否符合预期,以及是否有一种干净的方法来实现独立注册。请注意,我们已经看到了命名注册的建议,但我们不想更改我们的框架,因为它正在使用中,而且通常我们不想无缘无故地强制应用程序符合命名实例。附加的代码演示了意外行为。
using System;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
namespace TestUnity
{
public interface IBaseInterface
{
string BaseString { set; get; }
}
public interface IChildInterface : IBaseInterface
{
string ChildString { set; get; }
}
public class ChildClass : IChildInterface
{
public string BaseString { set; get; }
public string ChildString { set; get; }
}
public class ContainerClass
{
public IBaseInterface impl { set; get; }
}
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.LoadConfiguration();
// the expected result BaseString ="IBaseInterface_BaseString" & ChildString ="IBaseInterface_ChildString"
// the result is BaseString ="IChildInterface_BaseString" & ChildString ="IChildInterface_ChildString"
var iBaseInterface = container.Resolve<IBaseInterface>();
// the expected result BaseString ="IChildInterface_BaseString" & ChildString ="IChildInterface_ChildString"
var iChildInterface = container.Resolve<IChildInterface>();
//We expect test class will be initialize with BaseString ="IBaseInterface_BaseString" & ChildString ="IBaseInterface_ChildString"
//but the result is the expected result BaseString ="IChildInterface_BaseString" & ChildString ="IChildInterface_ChildString"
var testClass = container.Resolve<ContainerClass>("Test");
//The container.Registrations include both regestered types(IBaseInterface & IChildInterface)
foreach (var registration in container.Registrations)
{
Console.WriteLine(@"RegisteredType :{0} ,MappedToType :{1}", registration.RegisteredType, registration.MappedToType);
}
Console.ReadLine();
}
}
}
应用程序配置
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="IBaseInterface" type="TestUnity.IBaseInterface, TestUnity" />
<alias alias="IChildInterface" type="TestUnity.IChildInterface, TestUnity" />
<alias alias="transient" type="Microsoft.Practices.Unity.TransientLifetimeManager, Microsoft.Practices.Unity"/>
<container>
<register type="IBaseInterface" mapTo="TestUnity.ChildClass, TestUnity">
<lifetime type="transient"/>
<property name="BaseString" value="IBaseInterface_BaseString" />
<property name="ChildString" value="IBaseInterface_ChildString" />
</register>
<register type="IChildInterface" mapTo="TestUnity.ChildClass, TestUnity">
<lifetime type="transient" />
<property name="BaseString" value="IChildInterface_BaseString" />
<property name="ChildString" value="IChildInterface_ChildString" />
</register>
<register name="Test" type="TestUnity.ContainerClass, TestUnity" mapTo="TestUnity.ContainerClass, TestUnity">
<lifetime type="transient" />
<property name="impl" dependencyType="IBaseInterface" />
</register>
</container>
</unity>
</configuration>
最佳答案
TL;DR - 抱歉,这似乎是 Unity 的一个限制。
我不是构建 Unity 的团队的成员,因此我只能推测预期的行为,因为没有针对此特定场景明确记录。但是优先考虑 Unity 的其他行为,我预计它会覆盖之前注册的 InjectionProperty
。
您是正确的,对象构建器在查找用于构建请求解析的对象实例的策略时不考虑已注册的类型。对象生成器键由 mapTo 类型和名称组成(参见 NamedTypeBuildKey )。创建此键的方式是 Unity 对象生成器内部不可或缺的一部分。尝试将已注册的类型添加到管道中的此键将比您想要处理的自定义更多。而且我想不出另一种方法来引入您希望的基于注册类型的独立注册行为(除了不同的具体类或多个命名注册)。
关于c# - 固件 : Unexpected result upon unnamed registration of the same mapTo with different mapFrom with injectedProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33949079/
我想使用 Fiware cygnus 将数据从上下文代理保存到 CKAN 实例中。我已经在 Fiware 云上创建了一个 orion-psb-image-R5.4 版本 1.7.0 的 orion 上
安装并运行 Cygnus(订阅 Orion)。 Orion 接收来自客户端的通知(通过 ioagent)。如何启动和创建持久性 postgresql 数据库? 从远程服务器访问固件。不确定要执行什么命
我需要编写 Android 应用程序,它在互联网上查找固件并允许自动下载选定的固件并在设备上执行更新。是否可以?谢谢 最佳答案 应该是可以的。我正在尝试做同样的事情。我作为另一个用户发布了一个关于这个
我能够为 NodeMCU 的所有分支构建固件,https://github.com/nodemcu/nodemcu-firmware仅当我将它们克隆到单独的本地目录时。 当我尝试只有一个文件夹并使用
我在固件镜像 CentOS-7-x64 上使用 RPM 安装了 cygnus,但无法将其作为服务启动,这是我的日志: [centos@cygnus-mongo conf]$ sudo service
我知道您可以使用地理位置过滤器queryContext Orion。 是否可以在订阅场景中进行类似的过滤?换句话说,是否可以仅当位置属性位于预定义区域内时通知我上下文实体属性的更改? 例如: 谢谢。
我正在更新最初与 iOS 2.0 及更高版本兼容的应用程序。 由于 Apple 放弃了对版本 < 3.0 的支持,我被迫放弃了对 2.0 的支持。 一些使用 iPod Touch 第二代的 Beta
我是一名付费开发人员,我刚刚意识到我需要在不使用 XCode 的情况下将 3GS 从 4.0 降级。我可以从哪里获取固件? 最佳答案 http://www.felixbruns.de/iPod/fir
我正在开发一个从 iDigi ( http://www.idigi.com ) 到 Arduino Mega 的连接器。我想要做的是允许 iDigi 远程更新我的 Arduino 固件。我的第一次计划
我有一个 shell 脚本,可以在运行的设备上安装该软件(Linkit Smart 7688 Duo,带有 OpenWrt)。它包含我的自定义 python 包和几个不同的文件。我已经设法从源代码为该
在 OSX 上的 https://github.com/ArduPilot/SiK/tree/8a690a28647ee6085e7dce456ab3963a350acb2d 的固件文件夹中运行 ma
随着 iOS 4 即将发布,我已经计划在我的应用程序的 future 更新中包含 iAd。我认为这将使我的应用程序对于固件低于 4.0 的任何人都无法使用。有没有办法根据用户的固件更改这些变量和 .x
作为 FINISH 加速器的一部分,我们使用 FIWARE KeyRock 和 Wirecloud。目前我们正在使用 Fiware labs 全局实例进行调查。 我们希望限制我们的系统,以便用户只能查
我正在 6SX-SABRE-SBD 板上进行测试。该主板安装了 i.MX6SX,一种非对称双核 CPU:Cortex A9 和 Cortex M4。 目前系统正在使用 U-Boot 和来自 SD 的
我想连接同一台服务器上不同数据库中的两个表。有人可以告诉我如何在 Zend Framework Db 适配器中执行此操作吗? 最佳答案 参见: connecting to two different
我目前想为我们的产品开发 Android 固件 OTA 更新。在研究如何执行此操作时,我了解到我需要用于固件的 Web 服务器。如果我错了,请纠正我。任何人都可以帮助我什么是我应该使用的最合适的网络服
所以我刚从 Windows 10 切换到 Linux Mint rosa。我想弄清楚如何通过 Eclipse 下载固件。每当我点击插件然后我得到固件; “启动nxjflashg失败org.lejos.
我为谷歌眼镜制作了一个视频录制应用程序。在 Google 发布固件 XE19.1 之前,该应用程序运行良好。我有另一台固件为 XE18.11 的 Google Glass。该应用程序仍可在采用 XE1
这个问题在这里已经有了答案: Debian 8. Failed to load iwlwifi (4 个答案) 关闭 5 年前。 你好,我有一台 Lenovo T460 并且刚刚安装了 Debian
在将相同的具体类注册到不同的未命名实例时,我们看到 Unity 出现意外行为。在这种情况下,注册似乎以意想不到的方式相互干扰。 我们为我们想要注入(inject)的其他应用程序提供了一个框架不同的界面
我是一名优秀的程序员,十分优秀!