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

前端之家收集整理的这篇文章主要介绍了依赖注入 – Autofac可以自动自动绑定吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道一些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.

猜你在找的设计模式相关文章