问题标签 [unity-container]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
inversion-of-control - 这在 Prism/Unity 中意味着什么:Container.Resolve()
(来自Prism V2 StockTrader 示例应用程序中的StockTraderRIBootstrapper.cs文件)
这有什么区别:
还有这个:
- 我知道第二个示例是将容器视为工厂,走到它面前说“我需要一个 ShellPresenter 类型的实例化对象”。
- 但是,如果,例如我需要发送参数,什么是“new ShellPresenter(1, true)”等的等价物呢?
- 而且由于容器必须被告知 ShellPresenter,我希望在项目中的某个地方找到 ShellPresenter 类向容器注册的地方,例如,我期待
像这样的东西:
但无处可寻。那么容器如何知道这些类型以便它能够解决它们呢?我在自己的项目中重建了它并得到“依赖项的解决失败”错误,那么我需要在哪里注册这个依赖项?
这里的任何方向/讨论都会有所帮助。
无法解释的答案:
因此,在引导程序中,当我注册 Shell 本身时:
那么 Container 可以解析 ShellPresenter 类型。那么我注册Shell类型的时候, ShellPresenter类型是怎么注册的呢?
令人惊讶的答案:
好的,事实证明,您不必注册您尝试解析的类型,但您必须注册传递给您尝试解析的类型的构造函数的参数(接口)类型,即因为我注入IShellView 接口到我的 ShellPresenter 的构造函数中,我需要注册 IShellView 类型而不是 IShellPresenter 类型:
我通过尝试解析类型Tester对此进行了测试:
只要我将SomeClass注入它的构造函数:
在向容器注册SomeClass之前,我得到未解决的依赖错误:
然后它工作。这既令人惊讶,又具有教育意义。需要沉下心来。我要去喝杯咖啡,想一想。
如果有人能详细说明为什么会这样,将不胜感激。
c# - 测试依赖注入配置
我正在使用 Unity 进行依赖注入。这在我测试我的对象时似乎很有帮助,因为我可以模拟所有依赖项。但是,我应该如何测试我的配置是否有效?
例如,我在 app.config 中更改了 Unity 配置,当然,项目将构建良好。我的测试目前只测试我的对象,所以它们仍然有效。但是我怎么能确定配置没有被破坏呢?
inversion-of-control - Unity Framework:如何从同一个接口实例化两个类?
我有一个接口和 2 个实现它的类,我需要加载每个类,但统一有:
m_unityContainer.Resolve() //接口IGeneric在哪里
我的配置看起来像:
有任何想法吗?
谢谢
c# - 复合应用程序库中 Unity 容器的代码在哪里?
我正在使用复合应用程序库,我遇到了例如这一行:
所以我想看看构成 Resolve 方法的代码。
所以我在 Visual Studio 中打开 CompositeApplicationLibrary_Desktop.sln。
我找到了 UnityBootstrapper.cs 之类的类,但我在任何地方都找不到 UnityContainer 类的代码。我找到了对它的引用,例如:
但是如果我右键单击“UnityContainer()”并选择“转到定义”,我得到的只是关于这个类的元数据。
在哪里可以查看 UnityContainer 类的 Resolve 方法的代码?
unity-container - 为什么 Unity 的 RegisterInstance<...> 会导致 Unity 返回多个实例?
Unity 的文档中提到了 RegisterInstance<> 方法,该方法注册一个实例,以便每次调用 Resolve<> 时都会返回该特定实例。
但是,下面的示例显示每次调用 Resolve<> 时,都会返回该类型的新实例。
为什么是这样?
dependency-injection - 如何让 Unity 的自动注入在接口注入的构造函数上工作?
Unity 文档指出:
如果开发人员使用 Unity 容器的 Resolve 方法实例化的类具有定义对其他类的一个或多个依赖项的构造函数,则 Unity 容器会自动创建在构造函数的参数中指定的依赖对象实例
这很好,但大多数情况下我不指定注入类,而是指定接口,以保持事物解耦。
那么,当我 .Resolve<>指定接口注入而不是类注入的类时,如何利用 Unity 的自动注入?
即在下面的代码中,当我将我的客户构造函数更改为“ public Customer(ILogger logger) ”时,如何使它工作?
silverlight - Prism 2 for Silverlight with Unity - 'System.Threading.SynchronizationLockException'
我正在将 Unity 与 Silverlight 和 Prism 2 一起使用。在我的笔记本电脑(运行 Vista 32)上,我在 VS.NET 2008 SP1 的输出窗口中看到以下错误 - 我认为这是 Unity 在内部捕获的。
Microsoft.Practices.Unity 中出现了“System.Threading.SynchronizationLockException”类型的第一次机会异常
在具有相同代码库的台式机(运行 Vista 64)上,但我没有看到相同的错误。
我首先发现笔记本电脑有问题,因为应用程序(使用 Prism 2)我发布了一些事件,但没有通知订阅者。台式机与 Prism 事件配合得很好。
知道有什么问题吗?迈克尔
.net - 在运行时注册类型
我试图弄清楚如何在运行时使用统一注册一个类型。有什么建议么?
基本上我希望能够做到这一点:
inversion-of-control - 在没有公共构造函数的情况下解析外部创建的对象实例
使用适配器模式,结合 IoC(特别是 Unity),我想创建一个对象的新实例,其属性指向适配器的属性(基本上将适配器映射到目标对象)。
例如,我有以下类结构:
问题是 Adaptee 不在我的控制之下,并且它没有公共构造函数,因此使用了适配器。所以 Adaptee 被创建如下
在实际代码中,上述代码将在外部控制的程序集中执行,然后传递给以下代码:
我希望代码的执行结果如下:
这意味着应将已解析的 Adapter 实例注入 myTestClass 实例的 MyTarget 属性。Adapter 的实例应该是用外部创建的 Adaptee 实例创建的。
以下代码:
实际上应该导致:
这似乎是不可能的,因为还没有 Adapter 的实例存在并且它有一个私有构造函数。
我应该使用拦截或其他东西来实现这一点吗?