译:邓明
此场景探讨了可以如何使用 Resolve 方法从 Unity 容器中获取注册的对象的具体实例。
典型目标在此场景中,仅使用对象的注册类型获取注册对象的默认(未命名的)实例、单件引用或者由容器管理的已存在对象的引用。
解决方案要从容器中获取实例,可以使用 Resolve 方法。在没有为可选的名称属性指定值来使用此方法时,方法返回用默认映射注册的对象。
注意:
在调用 Resolve 方法并且指定了没有注册的类型的默认实例时,容器简单的生成并返回类型的实例。然而,这仅在生成的对象包含依赖属性的时候才有用,容器用来注入依赖对象到请求的对象。
如果在调用 Resolve 方法或者指定了名称,也就是注册类型,而没有用于类型或名称的映射注册,容器将触发异常。
用默认映射从容器中获取对象1.使用一个容器的引用,调用 Resolve 方法并指定需要的对象类型(在注册对象时指定的类型)。如果注册的是 IMyService 接口,映射到具体类型 EmailService,下列代码将获取 EmailService 的实例:
C#
IMyService result = myContainer.Resolve<IMyService>();
Visual Basic
Dim result As IMyService = myContainer.Resolve(Of IMyService)()
注意:用于 Unity 容器的 API 包含了绝大多数方法的泛型和非泛型的重载,所以可以在不支持泛型语法的语言中使用它。更多信息,请参见
Unity 应用程序块的方法。
2.如果注册的是 MyServiceBase 类型的对象,映射到具体类 CustomerService,下列代码将获取 CustomerService 的实例:
C#
MyServiceBase result = myContainer.Resolve<MyServiceBase>();
Visual Basic
Dim result As MyServiceBase = myContainer.Resolve(Of MyServiceBase)()
3.如果知道返回的实质类型,也许可以考虑指定此做为返回类型,就像下列代码一样。然而,如果后来修改了容器中的映射,这将出现错误。
C#
CustomerService result = (CustomerService)myContainer.Resolve<MyServiceBase>();
Visual Basic
Dim result As CustomerService = myContainer.Resolve(Of MyServiceBase)()
更多信息在这种场景中讨论的技术的更多信息,请参见以下主题:
顶部