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

c# - IOC 容器的最佳实践

我正在使用 Unity IOC 容器,我只是想知道访问多个类的容器的最佳方式是什么。

每个类都应该有一个 IUnityContainer 成员,然后通过构造函数传入容器吗?是否应该有一个带有 IOC 容器的单例类?

asp.net开发怎么样?

有人可以指导我正确的方向吗?谢谢。

0 投票
8 回答
24934 浏览

.net - Unity中的Setter / property注入没有属性

我正在开发一个将 Unity 框架用作 IoC 容器的项目。我的问题与使用属性或设置器注入将可选依赖项(在本例中为记录器)注入多个类有关。

我不想用这些可选的依赖项来混淆我所有类的构造函数,但是我找不到在 Unity 中处理这个问题的好方法。根据MSDN 文档,您可以通过向属性添加属性来执行此操作:

我觉得这很丑陋。在StructureMap中,可以执行以下操作来设置给定类型的所有属性:

有谁知道是否可以在 Unity 中做类似的事情?

编辑:

Kim Major 建议使用这种方法,也可以通过代码实现。

我会对如何为所有匹配属性自动执行此操作的示例感兴趣。

0 投票
1 回答
9383 浏览

c# - 如何在主容器中注册类型,但在子容器中解析?

我有一个统一容器,用于RegisterType注册以下存储库和实现者,使用ContainerControlledLifetimeManager.

使用这种模式,我可以让多个线程(它是一个 Web 应用程序)同时使用同一个存储库实例,尽管每个线程都使用不同的ObjectSpace(这是一个本地缓存 + 用于从数据库中获取对象的机制 +一个工作单元等)。但这让我觉得“肮脏”,而不是那种好:-)

我真正想要的是:

为此,我必须创建一个子容器并使用它RegisterInstance来注册我的ObjectSpace. 只要我要么:

  1. IPersonRepository而是在子容器中注册
  2. 将生命周期管理器更改为TransientLifetimeManager

我也不想做。(1) 工作量太大,我想在父容器中注册一次,然后不再注册。(2) 可以,但是如果有很多依赖项,那么所有这些也必须是暂时的,这将导致每次我需要人员存储库时都会创建很多实例。

所以我的问题是:有没有办法在父容器中注册类型,但是要解析容器生命周期实例并将其存储在子容器而不是父容器中?也许有一种使用自定义生命周期管理器或其他方法的方法?

我想要实现的是:

0 投票
1 回答
1725 浏览

inversion-of-control - 我应该让 IUnityContainer 对象使用单例模式吗?

我是使用 Unity 和 IoC/DI 概念的新手。我通过dnrTV上的James Kovacs 的节目在测试中推出了我自己的概念,从而开始了这个概念。

他的示例将容器作为单例运行,通过 IoC 类中的静态方法访问,因此您可以在启动时注册类型并在整个应用程序中解析类型。

我知道这不是全功能,主要是展示 IoC 的概念。

我现在正在尝试在项目中使用 Unity。

在我的 Main() 中,我创建了一个新容器,但是一旦我的 WinForms 打开,该容器就会超出范围并被处置。稍后在程序中,当我尝试解析类型时,我不再拥有原始容器及其注册类型。

是否有我缺少的概念或实现结构?

我目前的想法是创建这样的东西:

我很确定这会奏效,只是看起来不对。

0 投票
1 回答
1470 浏览

nhibernate - 使用 NHibernate 在 Unity 拦截下从代理获取真实实例

我正在使用 Unity 为可插拔架构动态解析类型。我还使用拦截通过 AOP 应用业务规则验证(使用ValidationAspects)。最后,我使用 NHibernate 作为 ORM 来持久化域对象。

为了让 AOP 工作,我们使用VirtualMethodInterceptor, 因为接口拦截不适用于 NHibernate。我有一个外观ISession来处理存储库操作的接口和真实类型之间的转换。

为了确保通过 NHibernate 获取的图中的所有对象都为 AOP 正确代理,我做了一个 NHIInterceptor实现并覆盖了该Instantiate()方法,因此我可以为 NH 提供创建的对象而不是让它调用new(). 然后,我使用Container.Resolve()注入验证来取回代理对象,并将其返回给 NH 以填充。这工作正常。

当会话刷新发生时,问题就出现了。NHibernate 感到不安,因为它在图中看到的对象是代理类型而不是真实类型。如果我可以覆盖类型检查,我们映射的方式(所有通过属性,所有虚拟)NH 应该能够通过代理获取它需要的所有值。

我需要知道的是:给定由 Unity 创建并启用拦截的透明代理对象,是否有任何方法可以直接引用它正在代理的“真实”实例,或者 b) 覆盖 NH 并告诉它处理代理类型的对象,就好像它是已知的映射类型一样,在运行时动态?

0 投票
1 回答
1983 浏览

generics - 将 iBATIS.NET 与通用自定义集合接口和 Unity 结合使用

我正在尝试在使用 iBATIS.NET 映射的类 O/R 中使用通用自定义集合接口(以支持使用 Microsoft Patterns and Practices Unity 进行注入)。有谁知道这是否可行,如果可以,该怎么做?

我有一个 IDataItemCollection<T> 接口,我映射到扩展 CollectionBase 的 SqlDataItemCollection<T>。我想在我的类中使用 IDataItemCollection<T>,以便可以将 SqlDataItemCollection<T> 与通过 Unity 扩展接口的其他类交换。iBATIS.NET 映射文件可以直接引用具体类,因为没有一个就没有另一个。

下面我包含了一个非常简化的代码、数据库和映射示例。我对 iBATIS.NET 完全陌生,现在真的只是想证明它的用途,所以请根据需要重新调整映射 XML。

非常感谢,

保罗


C# 代码

SQL Server 2005 数据库

iBATIS.NET 映射.xml

0 投票
2 回答
4552 浏览

wcf - 如何使用 WCF 和 Unity 进行拦截

我有一个设置为托管在统一容器中的 WCF 服务。我打算使用这个容器来执行方法拦截。问题是我无法让我的拦截器开火......

首先在这里定义我的拦截器属性和处理程序:

在我的主机中,我尝试将其配置为使用拦截无济于事......帮助!!!!

我在这里做错了什么?

0 投票
6 回答
110967 浏览

c# - 有人可以解释 Microsoft Unity 吗?

我一直在阅读 MSDN 上有关 Unity(依赖注入、控制反转)的文章,但我认为我需要用简单的术语(或简单的示例)来解释它。我熟悉 MVPC 模式(我们在这里使用它),但我还不能真正掌握 Unity 的东西,我认为这是我们应用程序设计的下一步。

0 投票
5 回答
11202 浏览

c# - Unity:如何在解析另一种类型时指定使用类型的特定实例

我在 Unity 中尝试以下操作:

我有一个带有以下构造函数的类型

使用 Unity解析时Type1,我想指定Type2要注入的特定实例。此特定实例Type2未在容器中注册。Type3已在容器中注册,应照常解决。

更具体地说,考虑Type1是一个DocumentViewer类。Type2是一个特定的Document. Type3是一个SpellingChecker

我希望能够解决仅DocumentViewerDocument运行时才知道的问题。可以创建不同的多个DocumentViewer实例。Documents

我怎样才能做到这一点?

0 投票
1 回答
299 浏览

asp.net - 如何在使用 Unity 的 Web 应用程序中保持跨回发的依赖关系?

msdn 上统一框架的此链接指出 您希望能够在 Web 应用程序中跨回发缓存或持久化依赖项

http://msdn.microsoft.com/en-us/library/dd203319.aspx#

我不确定上述所有陈述的含义。我正在寻找一个示例,我们如何使用 Unity 来做到这一点 - 不确定 Unity 将如何解决回发问题。它会在会话中保持依赖关系并将其取回吗?