asp.net – Autofac – 设置依赖注入的基本解释

所以我正在尝试将Autofac设置到我自己的ASP.Net网络项目中.我已经修改了已经设置了依赖注入的现有ASP.Net项目,所以我想学习如何从头开始设置项目.我问朋友怎么做,他给了我代码.

这绝对是太棒了,因为我知道它会起作用.然而,它很糟糕,因为 – 也是我在Autofac网站上找到的教程 – 它没有解释太多(我更多的是一个图片细节的人,我讨厌单词问题.必须想象它!)

所以,这是有效的代码.

// Create your builder.
1 var builder = new ContainerBuilder();
2 builder.RegisterControllers(typeof(MvcApplication).Assembly);

3 builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
4 builder.RegisterModelBinderProvider();
5 builder.RegisterModule(new AutofacWebTypesModule());
6 builder.RegisterSource(new ViewRegistrationSource());

// assign interfaces here to the container so that it knows how to resolve requests
7  builder.RegisterType<foo>().As<ifoo>().InstancePerHttpRequest();

// create container
8 var container = builder.Build();
9 DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

有人可以向我解释 – 按命令命令 – 每一步做什么?我知道依赖注入的作用……中央源创建/分发用于控制器和模型的接口,而不需要自己创建每个实例的控制器/模型.但了解骨干的工作原理会很好.

这是我到目前为止所拥有的:

1)创建一个指令列表,让我们说一步一步的配方

2)添加到配方’识别Web应用程序控制器’,以便您可以根据需要调用控制器.例如,FooController需要来自BarController的东西,解析BarController

3) – 6)不知道

7)加上配方,将混合界面’ifoo’添加到混合中;它的生命周期存在于每个请求中.不要再坚持了;基本上为每个动作发送一个新的

8)完成配方说明.实际上按照说明将结果放入一个巨大的碗里.

9)告诉应用程序存在这一大碗好吃的东西.除非你从碗里拿出东西,它实际上是放入的东西的副本.因此,无穷无尽的好东西.

最佳答案 3)此扩展方法类似于RegisterControllers – 它从给定的程序集中注册所有模型绑定程序.模型绑定器是实现IModelBinder接口的类.它们的目的是将从请求传入的数据映射到控制器操作接受的模型.有关更多信息,您可以在此处看到示例:
http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder

4)RegisterModelBinderProvider注册AutofacModelBinderProvider – 由于它,您注册RegisterModelBinders的模型绑定器将自动应用于您的应用程序.

5)RegisterModule注册autofac模块 – 一个派生自Module类的类.通常在其中,您可以覆盖Load方法,您可以在其中存储其他autofac注册内容. AutofacWebTypesModule代码可以在这里找到:https://code.google.com/p/autofac/source/browse/src/Source/Autofac.Integration.Web.Mvc3/AutofacWebTypesModule.cs?r=94f70ab10f4d65991c600e2e80171ce4847589e6
它注册包装HttpContext.Current的类.由于HttpContext是静态的,因此不能在单元测试中进行模拟,因此自动测试是有问题的. AutofacWebTypesModule可帮助您克服该问题.

6)RegisterSource允许您注册新的来源.它们与服务查找模式非常相似.多亏了它们,您可以解决某些未在autofac中明确注册的事情(比如您可以注册ISomeInterface类型的对象,然后解析Owned而不显式注册它).你可以在这里阅读更多内容:http://nblumhardt.com/2010/01/declarative-context-adapters-autofac2/. ViewRegistrationSource代码如下所示:https://code.google.com/p/autofac/source/browse/src/Source/Autofac.Integration.Mvc/ViewRegistrationSource.cs?r=8974cef867b5b2f2876a8c71037014424bd87aba正如其中所述,其目的是允许您解析WebViewPage,ViewPage,ViewMasterPage和ViewUserControl.您可以在cshtml文件中定义视图,但您也可以将它们定义为WebViewPage类 – 然后可以在许多程序集中共享它们 – 但cshtml不能. RazorGenerator工具可以为您的cshtml视图生成WebViewPage类.感谢ViewRegistrationSource,你可以在一些程序集中定义WebViewPage HomeView.cs,然后不用autofac注册它就像解决context.Resolve()并从动作返回一样.

关于这些主题的更好的阅读:https://code.google.com/p/autofac/source/browse/Mvc3Integration.wiki?repo=wiki&r=7393a4178bea525f783cef91e206fbdc3921411a

点赞