AutoFac mvc和WebAPI 注册Service (接口和实现)
AutoFac mvc和WebAPI 注册Service (接口和实现)
1、准备组件版本:Autofac 3.5.0 Autofac.Integration.Mvc 3.3.0.0 (Install-package Autofac.Mvc 相应版本) Autofac.Integration.WebApi 4.0.0.0 (Install-package Autofac.WebApi 相应版本)
***install-package autofac.webapi2 (注意:您的项目中如果使用的是webapi2,此处必须为webapi2而不是webapi,否则在运行时将出现“重写成员“Autofac.Integration.WebApi.AutofacWebApiDependencyResolver.BeginScope()”时违反了继承安全性规则。重写方法的 安全可访问性必须与所重写方法的安全可访问性匹配。”错误。)
2、Global.asax 中代码:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); // AutoFac 注入初始化
AutoFacBootStrapper.CoreAutoFacInit();
}
3、实现注入类: AutoFacBootStrapper 及实现批量service注入
public class AutoFacBootStrapper
{
public static void CoreAutoFacInit()
{
var builder = new ContainerBuilder();
HttpConfiguration config = GlobalConfiguration.Configuration;
//注册所有的Controllers
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
#region 可正常 用
var baseType = typeof(IDependency);
var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList();
var allServices = assemblys.SelectMany(s => s.GetTypes()).Where(p => baseType.IsAssignableFrom(p) && p != baseType);
builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(t => baseType.IsAssignableFrom(t) && t != baseType)
.AsImplementedInterfaces().PropertiesAutowired().InstancePerLifetimeScope();
//注册所有的ApiControllers
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
//autofac 注册依赖
IContainer container = builder.Build();
// webApi部分注册
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
#endregion 可正常用
} }
4、接口部分需继承 IDpendncy,该类无实现类 仅为批量注册提供标示
public interface IDependency
{ }
5、IService 和Servicep 实现
public interface ICustomerService:IDependency
{ string GetCustomerName(); }
public class CustomerService: ICustomerService
{
/// <summary>
/// 获取客户信息
/// </summary>
/// <returns></returns>
public string GetCustomerName()
{
return "WebAPI_Success";
}
}
6、Controller 调用注入类 和ApiController 调用注入类
public class HomeController : Controller
{ public ICustomerService _customerService { get; set; }
public ActionResult Index()
{
ViewBag.Title = "Home Page"; return View();
}
}
public class CustController : ApiController
{ public ICustomerService _customerService { get; set; }
// GET: api/Cust
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
} // GET: api/Cust/5
public string Get(int id)
{
return "value";
} // POST: api/Cust
public void Post([FromBody]string value)
{
}
}
至此Autofac 注入就完成了,如有问题请联系我 相互交流。qq:626382542
AutoFac mvc和WebAPI 注册Service (接口和实现)的更多相关文章
- Autofac - MVC/WebApi中的应用
Autofac前面写了那么多篇, 其实就是为了今天这一篇, Autofac在MVC和WebApi中的应用. 一.目录结构 先看一下我的目录结构吧, 搭了个非常简单的架构, IOC(web), IBLL ...
- autofac解析Mvc和Webapi的坑
我们在项目中很早就开始使用autofac,也以为知道与mvc和webapi集成的做法. var builder = new ContainerBuilder(); // Mvc Register bu ...
- 转:autofac在mvc和webapi集成的做法
本文转自:http://www.cnblogs.com/Hai--D/p/5992573.html var builder = new ContainerBuilder(); // Mvc Regis ...
- .net core 源码解析-mvc route的注册,激活,调用流程(三)
.net core mvc route的注册,激活,调用流程 mvc的入口是route,当前请求的url匹配到合适的route之后,mvc根据route所指定的controller和action激活c ...
- mvc route的注册,激活,调用流程
mvc route的注册,激活,调用流程(三) net core mvc route的注册,激活,调用流程 mvc的入口是route,当前请求的url匹配到合适的route之后,mvc根据route所 ...
- 给Asp.Net MVC及WebApi添加路由优先级
一.为什么需要路由优先级 大家都知道我们在Asp.Net MVC项目或WebApi项目中注册路由是没有优先级的,当项目比较大.或有多个区域.或多个Web项目.或采用插件式框架开发时,我们的路由注册很可 ...
- SlickOne -- 基于Dapper, Mvc和WebAPI 的快速开发框架
前言:在两年前,项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实践和应用,今再次对SlickOne项目做以回顾和总结.其目的是精简,持续改进,保持重 ...
- jsp-3 简单的servlet连接mysql数据库 使用mvc的登录注册
简单的servlet连接mysql数据库 使用mvc的登录注册 commons-dbutils-1.6 mysql-connector-java-5.1.40-bin c3p0-0.9.5.2 mch ...
- C# MVC+EF—WebApi
上一篇搭建了页面,这里写下功能. 这里我用WebApi实现数据的增删改查. 一.新建Controller 为了区分明确,我在Controller文件夹下建立一个WebApi文件夹存放. 选中文件夹右键 ...
随机推荐
- [已解决]报错: Version in docker-compose is unsupported
docker compose将解析版本为"2",而不是"3.3".应该改为: version: "2"
- spark复习总结02
1.spark执行原理图 spark程序启动后创建sparkContext作为程序的入口,sparkContext可以与不同类的集群资源管理器(Cluster Manager)进行通信,从而获得程序运 ...
- 标准模板库(STL)学习探究之Multimap容器
C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素.(具体用法请参考map容器) 函数列表: begin() 返回指向第一个元素的迭代器 cle ...
- vue 学习八 自定义指令
vue指令注册有两种方式 1 全局注册 在main.js中 使用vue.directive Vue.directive('alert_w', { inserted(el,bin,vn) { conso ...
- java.lang.SecurityException: class "javax.servlet.ServletRegistration"'s signer information does not match signer information of other classes in the same package
报错信息: 报错截图: 解决方案: 因为本人是sbt项目,所以添加一下依赖之后解决: 如果是maven项目的话,添加依赖到pom文件中然后在重新build,之后就可以了
- spring接收文件资源
提交请求的contentType为multipart/form-data 图片提交在form中的名称为file 后端接收示例 @RequestMapping("/picture") ...
- vs code的简单插件
Auto Close Tag VSCode Color Info Mithril Emmet support for VS Code Open HTML in Default Browser open ...
- 超实用的HTML代码段(赵荣娇)
第1章 创建HTML文档 11.1 HTML文档的基本结构 2 <html> <head> <title>Title of page</title> & ...
- Unity 调用jar闪退 解决方案
{ https://www.cnblogs.com/YZFHKMS-X/p/11864496.html }
- git——commit之后一直出现一个>
在网上搜了半天,也没见过有类似的情况,忘记具体是怎么解决的了,我记得是重新add了一遍,再commit就OK了 更新: 感谢@月下初拥的评论,找到了原因,可能是由于commit的注释结构有误造成的,比 ...