项目之前用的是Ninject,最近比较流行AutoFac,所以决定自己倒持配置一下,不过之前是比较简单。项目框架是从.netframework4.0升级到了4.5,刚开始运行报错,因为视图的配置文件没有跟着一起更改,改后跑起来了。
<configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections>
这是后来更改的版本号
<configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections>
还有这个也要改
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
因为框架是通过nuget升级安装的,所以大的配置文件就不需要更改了。其实这个版本号要是不放心直接新建一个MVC空项目,直接把配置信息拷贝过来即可。
好了,现在言归正传,具体注入AutoFac
1.要在Nuget管理包下载AutoFac与AutoFac.MVC5
2.添加服务层的IUserRepository、IClassRepository接口与对应实现。
3.修改global配置文件
#region 注入 //这里一定要注意,首先依赖关系接口一定要设置为静态的,并且是public。不然用到的时候无法调用。 public static IContainer container { get; set; } public void Dependency() { //实例化控制器 var builder = new ContainerBuilder(); //注册类型(映射实现类) builder.RegisterType<ClassRepository>().As<IClassRepository>(); builder.RegisterType<UserRepository>().As<IUserRepository>(); //注册到控制器 builder.RegisterControllers(Assembly.GetExecutingAssembly()); container = builder.Build(); //下面就是使用MVC的扩展 更改了MVC中的注入方式. DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
调用Dependency方法
protected void Application_Start() { Dependency(); AreaRegistration.RegisterAllAreas(); ………… }
4.为了减少每次controller里面都对字段的定义,现在在公共的控制器定义对应的字段,公共的控制器:BaseController
#region Autofac依赖注入 protected IUserRepository UserRepository; protected IClassRepository ClassRepository; #endregion
5.在具体的控制器里面对其构造函数依赖注入
public UserOperatorController(IUserRepository userRepository) { UserRepository = userRepository; }
6.后面具体调用就可以了,是不是很简单啊,小功告成。