c# - 统一解决没有类型信息
问题描述
Unity 支持基于类型的解析
T obj = container.Resolve<T>("id");
这意味着在不知道 T 的情况下,我无法解析,我正在为我的统一容器编写一些扩展方法,我想在其中添加将返回对象类型的 Resolve 方法。
object obj = container.Resolve("id");
因为在注册时我已经知道 T,所以我可以在字典中输入“ID”。这是不可靠的,因为统一本身可以解析某些类型(即使未注册)是否有一种更简单可靠的方法来仅使用 Id 进行解析?
由于性能问题,这与从反射调用通用方法不同,而且由于资源已经注册为 DI,因此我想使用现有的解决方案来保持它的一致性。
解决方案
现在,如果我可以通过 ID 解析某些内容并返回对象或动态,我可以在内部使用类型转换器稍后将其转换为预期类型。前期我不知道必须使用哪种类型。
如果object
是您的界面,您当然可以使用它:
container.RegisterType<object, ObscureService>( "service" );
container.RegisterType<object, SecretPlugin>( "plugin" );
object unknown = container.Resolve<object>( "service" );
object anotherUnknown = container.Resolve<object>( "plugin" );
但是,这具有非常有限的(明智的)用途。我想说,如果您根据用户的直接请求采取行动,并且已解决的未知数是某种仅用于呈现给用户的视图模型,那么您应该只使用它。
如果代码请求该对象,则没有理由该代码不应该以某种方式知道它在请求什么。
推荐阅读
- python - 如何ping我的局域网中的所有IP
- python - 使用基准列表排序列表
- python - 为什么我在提交处理请求时收到 403 错误?
- python - 使用 cx_Oracle 和 flask_restful 进行分页
- rust - 如何对余额数进行算术运算以避免 NEAR 智能合约溢出?
- flutter - 由于用户更改了应用程序的主题,字体的主题没有正确重建(GetX 状态管理)
- python - 使用递归确定半完美数
- excel - 如何在excel中将列从不同字符转换为10个字符格式?
- php - 当 pm.max_children > 506 时 PHP 7.2 无法启动
- discord - 如何删除用户在 Discord 上删除的类别的频道?