mvc5整合Autofac

本文中将使用 mvc5与webapi2进行对Autofac整合

准备工作:

  1、vs2013 or vs2013+

  2、网络良好,nuget正常访问

好了需要的准备工作就这么多。

-----------------------------分割线---------------------------------------

1、首先新建一个mvc5 与 webapi2 的项目如下图

2、安装相应的插件:

1   <package id="Autofac" version="3.5.0" targetFramework="net46" />
2   <package id="Autofac.Configuration" version="3.3.0" targetFramework="net46" />
3   <package id="Autofac.Mvc5" version="3.3.4" targetFramework="net46" />
4   <package id="Autofac.Mvc5.Owin" version="3.1.0" targetFramework="net46" />
5   <package id="Autofac.Owin" version="3.1.0" targetFramework="net46" />
6   <package id="Autofac.WebApi2" version="3.4.0" targetFramework="net46" />
7   <package id="Autofac.WebApi2.Owin" version="3.3.0" targetFramework="net46" />

ps:请参考id进行进行安装

3、在Startup文件中配置 Autofac(ps:看下面代码 有很多可选配置 应为我没有用到就注释了。例如builder.RegisterModelBinders(Assembly.GetExecutingAssembly())  因为我没有自定义ModelBinders 就启用)

 1 public partial class Startup
 2     {
 3         public void Configuration(IAppBuilder app)
 4         {
 5             //ConfigureAuth(app);
 6             var builder = new ContainerBuilder();
 7             // Register dependencies, then...
 8             IOCRegister.Init(builder);
 9
10             // Register your MVC controllers.
11             builder.RegisterControllers(typeof(MvcApplication).Assembly);
12             // OPTIONAL: Register model binders that require DI.
13             //builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
14             //builder.RegisterModelBinderProvider();
15
16             // OPTIONAL: Register web abstractions like HttpContextBase.
17             //builder.RegisterModule<AutofacWebTypesModule>();
18
19             // OPTIONAL: Enable property injection in view pages.
20             //builder.RegisterSource(new ViewRegistrationSource());
21
22             // OPTIONAL: Enable property injection into action filters.
23             builder.RegisterFilterProvider();
24             builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
25             var config = GlobalConfiguration.Configuration;
26             // Set the dependency resolver to be Autofac.
27             var container = builder.Build();
28             DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
29             config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
30             app.UseAutofacMiddleware(container);
31             app.UseAutofacMvc();
32             app.UseAutofacWebApi(config);
33         }
34     }
 1 public class IOCRegister
 2     {
 3         public static void Init(ContainerBuilder builder)
 4         {
 5             XmlConfigurator.Configure(new FileInfo(Path.Combine(HttpContext.Current.Server.MapPath("/"), "log4net.config")));
 6             var logger = LogManager.GetLogger("");
 7             builder.RegisterInstance(logger).As<ILog>().SingleInstance();
 8
 9
10             var configPath = Path.Combine(HttpContext.Current.Server.MapPath("/"), @"App_Data/Config");
11
12             builder.RegisterModule(new ConfigurationSettingsReader("components", Path.Combine(configPath, "components.xml")));
13             //更多配置文件.....
14
15         }
16     }

ps:以上代码使用配置文件的方法配置 注入实例

4、配置文件components.xml

1 <?xml version="1.0" encoding="utf-8" ?>
2 <components defaultAssembly="BA.Framework.Util">
3   <files>
4     <file name="App_Data/Config/services.xml" section="services" />
5   </files>
6 </components>

5、配置文件 services.xml

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <service defaultAssembly="WebApplication1Service">
 3   <components>
 4     <component
 5            type="WebApplication1Service.TestService"
 6            service="WebApplication1Service.ITestService"
 7            instance-scope="per-lifetime-scope">
 8       <parameters>
 9         <parameter name="name" value="adfasdfasdfasdfasdf" />
10         <parameter name="age" value="121"/>
11       </parameters>
12     </component>
13
14   </components>
15 </service>

ps: 注意 defaultAssembly 需要配置注入类的命名空间

最后:关于TestService.cs

 1  public interface ITestService
 2     {
 3         string Test();
 4
 5         TestModel GetInfo();
 6
 7     }
 8
 9     public class TestService : ITestService
10     {
11
12         private readonly string name;
13         private readonly int age;
14
15         public TestService(string name, int age)
16         {
17             this.name = name;
18             this.age = age;
19         }
20         public int Count { set; get; }
21
22         public string Test()
23         {
24             return "afdafdasdf";
25         }
26
27         public TestModel GetInfo()
28         {
29             return new TestModel()
30             {
31                 Age = age,
32                 Name = name
33             };
34         }
35     }
36
37     public class TestModel
38     {
39         public string Name { get; set; }
40         public int Age { set; get; }
41     }

Controller里使用Service:

 public class Home2Controller : ApiController
    {
        private readonly ITestService _testService;
        public Home2Controller(ITestService testService)
        {
            _testService = testService;
        }
        public TestModel Get()
        {
            return _testService.GetInfo();
        }
    }
时间: 2024-10-16 23:39:38

mvc5整合Autofac的相关文章

NET Core 整合Autofac和Castle

NET Core 整合Autofac和Castle 阅读目录 前言: 1.ASP.NET Core中的Autofac 2.整合Castle的DynamicProxy 3.注意事项 回到目录 前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 回到目录 1.ASP.NET Core中的Autofac 首先在Project.json的Dependency节点为中添

Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac(转)

经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点,为方便起见,选初始带HomeController和AccountController的那种.然后通过NuGet或到Autofac官网下载来引入类库.个人推荐前者,因为从VS2010开始,已内集可视化的NuGet功能,使用起来非常方便.如下图所示: 这是vs2012的界面,点击"Manage NuG

MVC5+EF+AutoFac+AutoMapper轻型架构

今天和大家一起学习一下当前流行的MVC5+EF+AutoFac+AutoMapper轻型架构,先上一张框架图 一.项目基本框架搭建 写程序的顺序是Model-DAL-BLL-UI,Model层就是表实体,我们略过,下面上DAL层代码 using Model; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; usi

Asp.net mvc中整合autofac

创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点,为方便起见,选初始带HomeController和AccountController的那种.然后通过NuGet或到Autofac官网下载来引入类库.个人推荐前者,因为从VS2010开始,已内集可视化的NuGet功能,使用起来非常方便.如下图所示: 这是vs2012的界面,点击“Manage NuGet Packages…”,弹出窗体如下,在右上角搜索框中输入“Autofac”,找到对应的库点击安装即可.这里需要应用的库有两

mvc5 + ef6 + autofac搭建项目(repository+uow)(二)

续上篇: DBContext 在上篇 图一类库根目录创建的 DbContextBase /// <summary> /// 数据库上下文基类 /// </summary> /// <typeparam name="TDbContext">实现了DbContext对象的上下文对象</typeparam> public class DbContextBase: DbContext { #region ctor public DbContext

mvc5 + ef6 + autofac搭建项目(三)

前面已经基本完成了框架的搭建,后面就是实现了,后面主要说下前端的东西bootstrap的使用和相关插件. 看图: 实现比较简单,在主页面只引入共用部分的 js等相关包,毕竟不是所有页面都需要列表以及其他插件的包,所以我是在当前页面直接引入的,用不到的页面完全没必要加载,你说不是吗? 主要是bootstrap-table的使用:默认的导出功能(当然,这里我把导出功能按钮隐藏了) @{ Layout = "~/Views/Shared/_LayoutContext.cshtml"; } &

autofac依赖注入MVC5和webapi2

终于把丢了好久的MVC捡起来,虽然有些许印象,但是还需要重新学习. 很多书本中都提到依赖注入,控制反转等概念,这些都是为了实现松耦合层.组件和类目的. 常见的是使用Repository类分离Controller和Model的直接联系.而为了解除Repository类和Controller的紧密联系,通常不是直接定义Repository类并实例化,而是通过Controller的构造方法注入指定的Repository. 1 public class ValuesController : ApiCon

【AutoFac】依赖注入和控制反转的使用

在开始之前首先解释一下我认为的依赖注入和控制反转的意思.(新手理解,哪里说得不正确还请指正和见谅) 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个时候我们不是一个创建者,我们是以一个请求者的身份去请求容器给我们这个对象实例.我们所有的对象依赖于容器提供给你的资源,控制权落到了容器身上.在这里的身份转化或许就是控制反转的核心吧. 依赖注入:我们向容器发出请求以后,获得这个对象实例的过程就叫依赖注入.也就是我们在使用对向前我们都需要先

Configuring Autofac to work with the ASP.NET Identity Framework in MVC 5

https://developingsoftware.com/configuring-autofac-to-work-with-the-aspnet-identity-framework-in-mvc-5 Configuring Autofac to work with the ASP.NET Identity Framework in MVC 5 By Tony Mackay  02 February 2015 This post will show you how to modify the