问题标签 [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 投票
3 回答
1849 浏览

c# - Unity 按约定配置

是否可以配置 Unity 依赖注入框架以按约定解决。所以换句话说,如果我有一个 ICustomerRepository 当它试图解决这个问题时,它会首先查看是否有任何已注册的类型,如果没有,那么按照惯例尝试解析 CustomerRepository 类。

这将节省大量重复编码。

0 投票
5 回答
51223 浏览

asp.net-mvc - Ninject 与 Unity 的 DI

我们正在使用 ASP.net MVC。

其中哪一个是最好的 DI 框架 Ninject 或 Unity,为什么?

0 投票
3 回答
669 浏览

unity-container - 如何隐藏真正的 IoC 容器库?

我想将我的所有代码与我选择的 IoC 容器库(Unity)隔离开来。为此,我创建了一个公开 Register() 和 Resolve() 的 IContainer 接口。我创建了一个名为 UnityContainerAdapter 的类,它实现了 IContainer 并包装了真实的容器。所以只有定义了 UnityContainerAdapter 的程序集才知道 Unity 库。

我的孤立思想有漏洞。Unity 搜索类型成员的属性以了解在何处注入依赖项。我见过的大多数 IoC 库也支持这一点。我遇到的问题是我想使用该功能,但我不希望我的类依赖于 Unity 特定属性。

您对如何解决此问题有任何建议吗?

理想情况下,我会创建自己的 [Dependency] 属性并在我的代码中使用该属性。但是我需要告诉真正的容器搜索我的属性而不是它自己的属性。

0 投票
1 回答
1705 浏览

unity-container - 什么对应于统一配置部分中的统一“注册名称”?

在使用代码在 Unity 容器中注册和解析类型时,您可以使用“注册名称”来消除源自接口或基类层次结构的引用的歧义。

'registration name' 文本将作为参数提供给 register 和 resolve 方法:

但是,当我在配置文件中注册类型时,我看不到可以分配“注册名称”的位置

我注册了一个接口:

然后我碰巧知道的两种类型实现了该接口:

然后我提供接口和这两种类型之间的映射:

这似乎对应于这段代码:

但显然我需要的是与此代码相对应的明确配置条目:

然后当我进入我的代码时,我可以这样做:

明白了吗?

谢谢,

金博尔

0 投票
3 回答
1853 浏览

inversion-of-control - 使用 Microsoft Unity 进行编程属性注入

我在我的解决方案中使用构造函数注入,但是这个类有一个属性,我不想在我具有不变依赖项的构造函数中传递该属性。

假设我有一个 ILogger,它有一个我想设置的 FileName 属性,同时仍然让它在构造函数中设置依赖关系。我如何去注册类型,同时传递默认连接字符串。

我希望有一种简单的方法来做到这一点 - 最好不要用属性装饰属性,但如果使用属性更容易设置,我想这很酷:)

所以问题是,我如何在也使用构造函数注入的对象上注入属性值 - 使用 Unity。

更新:我在标题中提到了它,但我忘了在正文中详细说明——我想手动(在代码中)设置这些依赖项,而不是在配置文件中。

0 投票
3 回答
3954 浏览

c# - Unity Container - 将 T 动态传递给 Resolve 方法

我创建了一个我已经键入的 ISearchable 接口,以便我可以检索 T 的 IEnumerable 作为结果。

我有许多为不同的域对象实现 ISearchable 的服务......

我想(通过 Unity)解决基于类型的 ISearchable ,但我正在努力让它工作......

以下内容无法编译,但希望能对我想要实现的目标有所了解。

任何帮助都感激不尽!

谢谢,

安迪

0 投票
3 回答
15547 浏览

asp.net - Unity 中的单例每个调用上下文(Web 请求)

几天前,我遇到了 ASP.Net 线程问题。我希望每个 Web 请求都有一个单例对象。我的工作单元实际上需要这个。我想为每个 Web 请求实例化一个工作单元,以便身份映射在整个请求中都是有效的。这样,我可以使用 IoC 将我自己的 IUnitOfWork 透明地注入到我的存储库类中,并且我可以使用相同的实例来查询然后更新我的实体。

由于我使用的是 Unity,所以我错误地使用了 PerThreadLifeTimeManager。我很快意识到 ASP.Net 线程模型不支持我想要实现的目标。基本上它使用一个线程池并回收线程,这意味着我每个线程得到一个 UnitOfWork !但是,我想要的是每个 Web 请求一个工作单元。

一点谷歌搜索给了我这个很棒的帖子。这正是我想要的。除了很容易实现的统一部分。

这是我对 PerCallContextLifeTimeManager 的统一实现:

当然,我用它来注册我的工作单元,代码类似于:

希望它可以节省一些时间。

0 投票
2 回答
1040 浏览

wpf - 有人可以解释 Prism 的 resolve<> 方法中发生的魔法吗?

我有一个带有以下 Initialize() 方法的CustomersModule.cs :

我从容器中解析的类如下所示:

TestWhatever类只是我创建的一个虚拟类:

然而,即使我从未注册过容器,容器也会愉快地解析 ,并且容器也会以某种方式找到TestWhatever,实例化它并将其注入.CustomersPresenterCustomersPresenter

我很惊讶地意识到这一点,因为我在 Prism 文档中找不到任何地方明确指出容器是如此自动化。

所以这很好,但是容器还做了什么我不知道的事情,即它还能做什么我不知道的事情?例如,我是否可以从其他模块注入类,如果模块恰好被加载,容器将注入它们,如果没有,它会注入 null?

0 投票
2 回答
1198 浏览

wpf - 如何在 Prism 中松散地引用模块,以便它们可以存在或不存在?

这个 stackoverflow 问题中,我了解到Prism/Unity 并不像我想象的那样解耦,例如,如果我有一个将 menuManager 注入其构造函数的类,那么我必须确保这个类确实存在于某个地方(我认为你可以只需拉出包含类的 .dll,容器就会处理它,例如在其位置注入 null):

但我可以解决这个问题:如果没有 MenuModule,应用程序就无法运行(或者,正如建议的那样,我可以拥有一个NullMenuModule,它什么都不做,只是防止应用程序崩溃)。

但是,我正在构建的应用程序将在 MenuModule 中有一个MenuManager 类,并且每个模块都必须使用 MenuManager 注册它想要在菜单中拥有的所有内容。但是,我希望能够换掉 MenuModules例如有一个InfragisticsMenuModule并有一个TelerikMenuModule等。

但是,当我在客户模块中时,为了使用 TelerikMenuModule,我需要引用它。当我想使用 InfragisticsMenuModule 时,我需要参考它。

那么我如何能够在不使用新引用重新编译所有模块的情况下使用 InfragisticsMenuModule “热交换” TelerikMenuModule,例如,我想替换它:

有了这个:

并且只需重新启动应用程序,它就会使用新的 InfragisticsMenuModule.dll 运行,并且不会抱怨 TelerikMenuModule.dll 不再存在

0 投票
1 回答
1287 浏览

wpf - Prism 的 IContainer 和 IUnityContainer 有什么区别?

我有一个Prism项目,其中包含从各种来源获得的代码,一切运行良好,但我注意到在我注入的某些模块中

在我注入的其他模块中

IContainer 似乎只有组件、添加和删除,而 IUnityContainer 有几十个方法。

我经常将 IContainer 更改为 IUnityContainer 以便我可以使用后者的解析方法。这两者有什么区别,我为什么要使用 IContainer?