我已经完成了使用Autofac + MVC5解决控制器依赖性的基础知识。但是,我想知道如何将依赖项注入服务。
给定样本定义,如何使用Autofac解析必要的依赖项来创建/获取类的实例化副本?
Bar : IBar
{
Public Bar(IFoo foo, IPanda panda)
{}
}
答案 0 :(得分:1)
最终,它归结为在Container中注册类型。如:
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在构造期间提供依赖项。