Autofac + MVC5:解决服务的依赖关系

Autofac + MVC5: Resolving a Service's Dependencies

我已经完成了使用 Autofac + MVC5 解决控制器依赖性的基础知识。但是,我想知道如何将依赖项注入服务。

给定这样的示例定义,我如何 create/get class 的实例化副本与 Autofac 解析必要的依赖关系?

Bar : IBar
{

  Public Bar(IFoo foo, IPanda panda)

{}


}

最终归结为在容器中注册类型。如:

var builder = new ContainerBuilder();
builder.RegisterType<Bar>().As<IBar>();
var container = builder.Build();

我假设您在初始化期间的某处使用 Builder 有类似的代码。

有几种不同的方法可以注册和配置依赖项、生命周期、拦截器等,更多信息在这里: http://docs.autofac.org/en/latest/register/registration.html

一旦一切都被注册,每当 Autofac 尝试实例化你的控制器时,它会检查你的控制器的构造函数,当它找到一个 IBar 作为依赖项时,它会寻找它的容器注册并相应地实例化.

当它尝试实例化 IBar 时同样适用,它会注意到 IFooIPanda 并重复相同的过程。

主要区别在于 Autofac 支持自动注册您的控制器,只是为了让您免去手动注册每个控制器的麻烦。

所以最后,它们都将以这种方式链接起来,根据需要创建依赖项。 我倾向于通过直接请求依赖项来避免使用 ServiceLocator 实例化样式,而只是让 Autofac 在构造期间提供依赖项。