加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

依赖注入 – Autofac可以自动自动绑定吗?

发布时间:2020-05-23 06:01:44 所属栏目:程序设计 来源:互联网
导读:我知道一些DI框架支持(例如 Ninject),但我特意想知道是否可以使用 Autofac. 我想要一个具体类的Autofac容器,并返回一个注册了所有适当的构造函数依赖关系的实例,而不用注册这个具体的类.即,如果我没有明确绑定,那么自动将具体类绑定到自己,就好像我已经调用bu

我知道一些DI框架支持(例如 Ninject),但我特意想知道是否可以使用 Autofac.

我想要一个具体类的Autofac容器,并返回一个注册了所有适当的构造函数依赖关系的实例,而不用注册这个具体的类.即,如果我没有明确绑定,那么自动将具体类绑定到自己,就好像我已经调用builder.Register< MyClass>();

这是一个很有用的例子,就是ViewModels.在MVVM中,分层是这样的,只有视图取决于ViewModel,而通过松散打字,并且您不会对View进行单元测试.所以没有必要模拟ViewModel进行测试,因此没有理由为每个ViewModel都有一个接口.所以在这种情况下,通常的“注册此接口来解决这个类”的DI模式是不必要的复杂性.显式的自我约束,如builder.Register< MyClass>();在处理与具体类一样简单的东西时也感觉像一个不必要的步骤.

我知道Autofac文档中的reflection-based registration example,但这不是我的口味.我不想提前注册每个可能的类别的复杂性(和缓慢);我想框架给我需要的时候我需要的.公约超过配置,所有这一切.

有没有办法配置Autofac,所以它可以说“哦,这是一个具体的类型,没有人注册,所以我只是像已经注册了默认设置”?

builder.RegisterTypesMatching(type => type.IsClass)

如果您使用look at the source,您将看到RegisterTypesMatching(和RegisterTypesFromAssembly)没有任何反映.在这种情况下,所有Autofac都在注册接受类型的规则.在我上面的例子中,我接受任何类型的类.

在RegisterTypesFromAssembly的情况下,Autofac会注册一条规则,说明“如果您想要解决的类型具有Assembly ==指定的程序集,那么我将给你一个实例”.

所以:

>注册时不进行类型反射
>任何符合条件的类型都将被解决

与直接注册具体类型相比,这将在解决时间内有一个惊喜,因为Autofac将必须弄清楚例如构造函数要求.也就是说,如果您使用默认实例范围(即单例),则只能在第一次解析该类型时执行命中.下一次它将使用已经创建的单例实例.

更新:在Autofac 2中有一个更好的方式使容器能够解决任何事情.这涉及the AnyConcreteTypeNotAlreadyRegistered registration source.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读