首页 > 解决方案 > 统一解决没有类型信息

问题描述

Unity 支持基于类型的解析

T obj = container.Resolve<T>("id");

这意味着在不知道 T 的情况下,我无法解析,我正在为我的统一容器编写一些扩展方法,我想在其中添加将返回对象类型的 Resolve 方法。

object obj = container.Resolve("id");

因为在注册时我已经知道 T,所以我可以在字典中输入“ID”。这是不可靠的,因为统一本身可以解析某些类型(即使未注册)是否有一种更简单可靠的方法来仅使用 Id 进行解析?

由于性能问题,这与从反射调用通用方法不同,而且由于资源已经注册为 DI,因此我想使用现有的解决方案来保持它的一致性。

标签: c#.netprismunity-containerdi-containers

解决方案


现在,如果我可以通过 ID 解析某些内容并返回对象或动态,我可以在内部使用类型转换器稍后将其转换为预期类型。前期我不知道必须使用哪种类型。

如果object是您的界面,您当然可以使用它:

container.RegisterType<object, ObscureService>( "service" );
container.RegisterType<object, SecretPlugin>( "plugin" );

object unknown = container.Resolve<object>( "service" );
object anotherUnknown = container.Resolve<object>( "plugin" );

但是,这具有非常有限的(明智的)用途。我想说,如果您根据用户的直接请求采取行动,并且已解决的未知数是某种仅用于呈现给用户的视图模型,那么您应该只使用它。

如果代码请求该对象,则没有理由该代码不应该以某种方式知道它在请求什么。


推荐阅读