问题标签 [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.

0 投票
4 回答
15436 浏览

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之前,我得到未解决的依赖错误:

然后它工作。这既令人惊讶,又具有教育意义。需要沉下心来。我要去喝杯咖啡,想一想。

如果有人能详细说明为什么会这样,将不胜感激。

0 投票
2 回答
598 浏览

c# - 测试依赖注入配置

我正在使用 Unity 进行依赖注入。这在我测试我的对象时似乎很有帮助,因为我可以模拟所有依赖项。但是,我应该如何测试我的配置是否有效?

例如,我在 app.config 中更改了 Unity 配置,当然,项目将构建良好。我的测试目前只测试我的对象,所以它们仍然有效。但是我怎么能确定配置没有被破坏呢?

0 投票
5 回答
1561 浏览

inversion-of-control - Unity Framework:如何从同一个接口实例化两个类?

我有一个接口和 2 个实现它的类,我需要加载每个类,但统一有:

m_unityContainer.Resolve() //接口IGeneric在哪里

我的配置看起来像:

有任何想法吗?

谢谢

0 投票
5 回答
3266 浏览

c# - 你如何模拟 IUnityContainer?

我正在尝试使用 Moq 3.0 模拟 IUnityContainer

我得到一个 BadImageFormatException,但在调试时没有。从外观上看,我不是唯一遇到这个问题的人。

这里

它是 Moq 的注册问题

这里

我只是好奇是否有人找到了解决方案...我发现的最接近的是使用 Roy Osherove 的 RhinoMock 的一个不错的解决方案

这里

但我真的很喜欢起订量!所以我真的不想切换到 Rhino Mock 但如果必须的话我会的

提前致谢!

0 投票
1 回答
1014 浏览

c# - 复合应用程序库中 Unity 容器的代码在哪里?

我正在使用复合应用程序库,我遇到了例如这一行:

所以我想看看构成 Resolve 方法的代码

所以我在 Visual Studio 中打开 CompositeApplicationLibrary_Desktop.sln。

我找到了 UnityBootstrapper.cs 之类的类,但我在任何地方都找不到 UnityContainer 类的代码。我找到了对它的引用,例如:

但是如果我右键单击“UnityContainer()”并选择“转到定义”,我得到的只是关于这个类的元数据

在哪里可以查看 UnityContainer 类的 Resolve 方法的代码?

0 投票
2 回答
5616 浏览

unity-container - 为什么 Unity 的 RegisterInstance<...> 会导致 Unity 返回多个实例?

Unity 的文档中提到了 RegisterInstance<> 方法,该方法注册一个实例,以便每次调用 Resolve<> 时都会返回该特定实例

但是,下面的示例显示每次调用 Resolve<> 时,都会返回该类型的新实例

为什么是这样?

0 投票
3 回答
2851 浏览

dependency-injection - 如何让 Unity 的自动注入在接口注入的构造函数上工作?

Unity 文档指出:

如果开发人员使用 Unity 容器的 Resolve 方法实例化的类具有定义对其他类的一个或多个依赖项的构造函数,则 Unity 容器会自动创建在构造函数的参数中指定的依赖对象实例

这很好,但大多数情况下我不指定注入类,而是指定接口,以保持事物解耦。

那么,当我 .Resolve<>指定接口注入而不是类注入的类时,如何利用 Unity 的自动注入?

即在下面的代码中,当我将我的客户构造函数更改为“ public Customer(ILogger logger) ”时,如何使它工作?

0 投票
1 回答
1202 浏览

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 事件配合得很好。

知道有什么问题吗?迈克尔

0 投票
1 回答
276 浏览

.net - 在运行时注册类型

我试图弄清楚如何在运行时使用统一注册一个类型。有什么建议么?

基本上我希望能够做到这一点:

0 投票
2 回答
551 浏览

inversion-of-control - 在没有公共构造函数的情况下解析外部创建的对象实例

使用适配器模式,结合 IoC(特别是 Unity),我想创建一个对象的新实例,其属性指向适配器的属性(基本上将适配器映射到目标对象)。

例如,我有以下类结构:

问题是 Adaptee 不在我的控制之下,并且它没有公共构造函数,因此使用了适配器。所以 Adaptee 被创建如下

在实际代码中,上述代码将在外部控制的程序集中执行,然后传递给以下代码:

我希望代码的执行结果如下:

这意味着应将已解析的 Adapter 实例注入 myTestClass 实例的 MyTarget 属性。Adapter 的实例应该是用外部创建的 Adaptee 实例创建的。

以下代码:

实际上应该导致:

这似乎是不可能的,因为还没有 Adapter 的实例存在并且它有一个私有构造函数。

我应该使用拦截或其他东西来实现这一点吗?