问题标签 [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.
c# - IOC 容器的最佳实践
我正在使用 Unity IOC 容器,我只是想知道访问多个类的容器的最佳方式是什么。
每个类都应该有一个 IUnityContainer 成员,然后通过构造函数传入容器吗?是否应该有一个带有 IOC 容器的单例类?
asp.net开发怎么样?
有人可以指导我正确的方向吗?谢谢。
.net - Unity中的Setter / property注入没有属性
我正在开发一个将 Unity 框架用作 IoC 容器的项目。我的问题与使用属性或设置器注入将可选依赖项(在本例中为记录器)注入多个类有关。
我不想用这些可选的依赖项来混淆我所有类的构造函数,但是我找不到在 Unity 中处理这个问题的好方法。根据MSDN 文档,您可以通过向属性添加属性来执行此操作:
我觉得这很丑陋。在StructureMap中,可以执行以下操作来设置给定类型的所有属性:
有谁知道是否可以在 Unity 中做类似的事情?
编辑:
Kim Major 建议使用这种方法,也可以通过代码实现。
我会对如何为所有匹配属性自动执行此操作的示例感兴趣。
c# - 如何在主容器中注册类型,但在子容器中解析?
我有一个统一容器,用于RegisterType
注册以下存储库和实现者,使用ContainerControlledLifetimeManager
.
使用这种模式,我可以让多个线程(它是一个 Web 应用程序)同时使用同一个存储库实例,尽管每个线程都使用不同的ObjectSpace
(这是一个本地缓存 + 用于从数据库中获取对象的机制 +一个工作单元等)。但这让我觉得“肮脏”,而不是那种好:-)
我真正想要的是:
为此,我必须创建一个子容器并使用它RegisterInstance
来注册我的ObjectSpace
. 只要我要么:
IPersonRepository
而是在子容器中注册- 将生命周期管理器更改为
TransientLifetimeManager
我也不想做。(1) 工作量太大,我想在父容器中注册一次,然后不再注册。(2) 可以,但是如果有很多依赖项,那么所有这些也必须是暂时的,这将导致每次我需要人员存储库时都会创建很多实例。
所以我的问题是:有没有办法在父容器中注册类型,但是要解析容器生命周期实例并将其存储在子容器而不是父容器中?也许有一种使用自定义生命周期管理器或其他方法的方法?
我想要实现的是:
inversion-of-control - 我应该让 IUnityContainer 对象使用单例模式吗?
我是使用 Unity 和 IoC/DI 概念的新手。我通过dnrTV上的James Kovacs 的节目在测试中推出了我自己的概念,从而开始了这个概念。
他的示例将容器作为单例运行,通过 IoC 类中的静态方法访问,因此您可以在启动时注册类型并在整个应用程序中解析类型。
我知道这不是全功能,主要是展示 IoC 的概念。
我现在正在尝试在项目中使用 Unity。
在我的 Main() 中,我创建了一个新容器,但是一旦我的 WinForms 打开,该容器就会超出范围并被处置。稍后在程序中,当我尝试解析类型时,我不再拥有原始容器及其注册类型。
是否有我缺少的概念或实现结构?
我目前的想法是创建这样的东西:
我很确定这会奏效,只是看起来不对。
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 并告诉它处理代理类型的对象,就好像它是已知的映射类型一样,在运行时动态?
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
wcf - 如何使用 WCF 和 Unity 进行拦截
我有一个设置为托管在统一容器中的 WCF 服务。我打算使用这个容器来执行方法拦截。问题是我无法让我的拦截器开火......
首先在这里定义我的拦截器属性和处理程序:
在我的主机中,我尝试将其配置为使用拦截无济于事......帮助!!!!
我在这里做错了什么?
c# - 有人可以解释 Microsoft Unity 吗?
我一直在阅读 MSDN 上有关 Unity(依赖注入、控制反转)的文章,但我认为我需要用简单的术语(或简单的示例)来解释它。我熟悉 MVPC 模式(我们在这里使用它),但我还不能真正掌握 Unity 的东西,我认为这是我们应用程序设计的下一步。
c# - Unity:如何在解析另一种类型时指定使用类型的特定实例
我在 Unity 中尝试以下操作:
我有一个带有以下构造函数的类型
使用 Unity解析时Type1
,我想指定Type2
要注入的特定实例。此特定实例Type2
未在容器中注册。Type3
已在容器中注册,应照常解决。
更具体地说,考虑Type1
是一个DocumentViewer
类。Type2
是一个特定的Document
. Type3
是一个SpellingChecker
。
我希望能够解决仅DocumentViewer
在Document
运行时才知道的问题。可以创建不同的多个DocumentViewer
实例。Documents
我怎样才能做到这一点?
asp.net - 如何在使用 Unity 的 Web 应用程序中保持跨回发的依赖关系?
msdn 上统一框架的此链接指出 “您希望能够在 Web 应用程序中跨回发缓存或持久化依赖项”
http://msdn.microsoft.com/en-us/library/dd203319.aspx#
我不确定上述所有陈述的含义。我正在寻找一个示例,我们如何使用 Unity 来做到这一点 - 不确定 Unity 将如何解决回发问题。它会在会话中保持依赖关系并将其取回吗?