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
时同样适用,它会注意到 IFoo
和 IPanda
并重复相同的过程。
主要区别在于 Autofac 支持自动注册您的控制器,只是为了让您免去手动注册每个控制器的麻烦。
所以最后,它们都将以这种方式链接起来,根据需要创建依赖项。
我倾向于通过直接请求依赖项来避免使用 ServiceLocator 实例化样式,而只是让 Autofac 在构造期间提供依赖项。
我已经完成了使用 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
时同样适用,它会注意到 IFoo
和 IPanda
并重复相同的过程。
主要区别在于 Autofac 支持自动注册您的控制器,只是为了让您免去手动注册每个控制器的麻烦。
所以最后,它们都将以这种方式链接起来,根据需要创建依赖项。 我倾向于通过直接请求依赖项来避免使用 ServiceLocator 实例化样式,而只是让 Autofac 在构造期间提供依赖项。