AutoFac+MVC+WebApi源码----我踩过的坑
发现网上关于AutoFac的Demo源码比较少,综合MVC和WepApi的更少。所以贴出源码
WebApi项目(MVC4不需要引用,历史遗留问题,人懒没删)


建项目
新建类库IAutoFacDal(接口),AutoFacDal,IAutoFacLogic(接口),AutoFacLogic,AutoFacDto(参数),AutoFacEntity(数据库实体)

新建WebApi

AutoFacEntity

User源码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace AutoFacEntity.DBModel
{
public class User
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex { get; set; }
}
}
User
AutoFacDto

UserAddInputDto源码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace AutoFacDto.Input
{
public class UserAddInputDto
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex { get; set; }
}
}
UserAddInputDto
UserModel源码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace AutoFacDto.Model
{
public class UserModel
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex { get; set; }
}
}
UserModel
UserAddOutputDto源码
using AutoFacDto.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace AutoFacDto.Output
{
public class UserAddOutputDto
{
public UserModel Info { get; set; }
}
}
UserAddOutputDto
IAutoFacDal
IUserDal

IUserDal源码
using AutoFacDto.Input;
using AutoFacDto.Model;
using AutoFacDto.Output;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IAutoFacDal.User
{
public interface IUserDal
{
UserAddOutputDto UserAdd(UserAddInputDto input);
}
}
AutoFacDal

UserDal源码(另一个类无视)
using IAutoFacDal.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AutoFacDto.Input;
using AutoFacDto.Output;
using AutoFacDto.Model; namespace AutoFacDal.User
{
public class UserDal : IUserDal
{
public UserAddOutputDto UserAdd(UserAddInputDto input)
{
UserAddOutputDto output = new UserAddOutputDto { Info=new UserModel()};
output.Info.Age = input.Age;
output.Info.Name = input.Name+"--默认调用";
output.Info.Sex = input.Sex;
return output;
}
}
}
UserDal
IAutoFacLogic

IUserLogic源码
using AutoFacDto.Input;
using AutoFacDto.Output;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IAutoFacLogic.User
{
public interface IUserLogic
{
UserAddOutputDto UserAdd(UserAddInputDto input);
}
}
IUserLogic
AutoFacLogic

UserLogic源码(UserInfoLogic是我测试替换数据源的,可以无视)
using IAutoFacLogic.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AutoFacDto.Input;
using AutoFacDto.Output;
using IAutoFacDal.User; namespace AutoFacLogic.User
{
public class UserLogic : IUserLogic
{
public IUserDal iServerUerDal; public UserLogic(IUserDal param)
{
iServerUerDal = param;
}
public UserAddOutputDto UserAdd(UserAddInputDto input)
{
return iServerUerDal.UserAdd(input);
}
}
}
AutoFacWebApi
WebApi项目默认是有代码并且能实现的
我只给出关键代码,如果需要Demo源码联系QQ85528445备注:博客园Autofac(Home里面有报错的话,把报错的删掉就能运行了)
using Autofac;
using Autofac.Integration.Mvc;
using Autofac.Integration.WebApi;
using AutoFacDal.User;
using AutoFacLogic.User;
using IAutoFacDal.User;
using IAutoFacLogic.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace AutoFacWebApi
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register); //注册全局过滤器
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AutoFacStart();
}
#region 实现依赖注入
/// <summary>
/// 使用AutoFac实现依赖注入,
/// </summary>
public void AutoFacStart()
{
var builder = new ContainerBuilder();
SetupResolveRules(builder); //注入 builder.RegisterControllers(Assembly.GetExecutingAssembly()); //注入Controller builder.RegisterApiControllers(Assembly.GetExecutingAssembly());//注入APi
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);//注入APi
builder.RegisterWebApiModelBinderProvider();//注入APi var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//注入Controller var webApiResolver = new AutofacWebApiDependencyResolver(container); //注入APi
GlobalConfiguration.Configuration.DependencyResolver = webApiResolver; //注入APi
}
/// <summary>
/// 注入规则
/// </summary>
/// <param name="builder"></param>
protected void SetupResolveRules(ContainerBuilder builder)
{
//UI项目只用引用service和repository的接口,不用引用实现的dll。
//如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dll
var IServicesBLL = Assembly.Load("IAutoFacLogic");
var ServicesBLL = Assembly.Load("AutoFacLogic"); var IServicesDAL = Assembly.Load("IAutoFacDal");
var ServicesDAL = Assembly.Load("AutoFacDal"); //实现服务接口和服务实现的依赖 业务逻辑层
builder.RegisterAssemblyTypes(IServicesBLL, ServicesBLL).AsImplementedInterfaces(); //实现服务接口和服务实现的依赖 数据层
builder.RegisterAssemblyTypes(IServicesDAL, ServicesDAL).AsImplementedInterfaces();
//特定条件的过滤注册-只注册结尾是User的
//builder.RegisterAssemblyTypes(IServices, Services).Where(t => t.Name.EndsWith("User")).AsImplementedInterfaces();
//使用新的覆盖旧的注册DLL-使用UserNew代替UserOld
builder.RegisterType<UserLogic>().As<IUserLogic>();
builder.RegisterType<UserInfoLogic>().As<IUserInfoLogic>();
builder.RegisterType<UserDal>().As<IUserDal>();
}
#endregion
}
}
Global
using AutoFacDto.Input;
using IAutoFacLogic.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace AutoFacWebApi.Controllers
{
public class HomeController : Controller
{
private IUserLogic iServerUserLogic;
private IUserInfoLogic iServerUserInfoLogic; /// <summary>
/// 配置构造函数注入
/// </summary>
public HomeController(IUserLogic param,IUserInfoLogic param2)
{
iServerUserLogic = param;
iServerUserInfoLogic = param2;
}
public ActionResult Index()
{
ViewBag.Title = "Home Page"; UserAddInputDto input = new UserAddInputDto();
input.Name = "Home Page";
//动态调用Bll项目中的类方法
//ViewBag.Title = iServerUserLogic.UserAdd(input).Info.Name;
ViewBag.Title = iServerUserInfoLogic.UserAdd(input).Info.Name;
return View();
}
}
}
HomeController
AutoFac+MVC+WebApi源码----我踩过的坑的更多相关文章
- Spring mvc之源码 handlerMapping和handlerAdapter分析
Spring mvc之源码 handlerMapping和handlerAdapter分析 本篇并不是具体分析Spring mvc,所以好多细节都是一笔带过,主要是带大家梳理一下整个Spring mv ...
- eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南
eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...
- 学习Spring5源码时所遇到的坑
学习Spring5源码时所遇到的坑 0)本人下载的源码版本是 spring-framework-5.0.2.RELEASE 配置好gradle环境变量之后,cmd进入到spring项目,执行gradl ...
- ASP.NET MVC 4源码分析之如何定位控制器
利用少有的空余时间,详细的浏览了下ASP.NET MVC 4的源代码.照着之前的步伐继续前进(虽然博客园已经存在很多大牛对MVC源码分析的博客,但是从个人出发,还是希望自己能够摸索出这些).首先有一个 ...
- 瞎折腾之 NHibernate ORM框架的接触(MVC + Repository源码)(一)
在这炮火连天.技术更新迅猛的年代,不接触了解.甚至会用2~3种框架都不好意思说自己有多少年工作经验.况且出去面试也会有点吹牛的底子嘛. 这次折腾了NHibernate.其实这些ORM框架封装好了都是给 ...
- SpringtMVC中配置 <mvc:annotation-driven/> 与 <mvc:default-servlet-handler/> 源码解析
上一篇有提到,当有.无这两个标签时,SpringtMVC 底层所采用的 HandlerMapping 以及 HandlerAdapter 是不一样的.现在就来进行源码调试,揭开 SpringtMVC ...
- kibana 5.5 源码编译踩坑记录
由于项目需要定制开发kibana,因此需要编译kibana,在开发环境下运行. 注意:必须下载kibana 5.5的源码才能正常编译,下载release或者snapshot版本是不行的,运行npm ...
- Unix 网络编程卷一源码编译踩坑记录 ubtutu 19.10
在阅读unpv1时运行源代码的环境配置,这里简单记录一下 源代码里的README 写得挺详细的,但是在Linux 系统的下还没没办法直接编译通过的, 这里我使用的是ubuntu 19.10(在腾讯云1 ...
- 《android 导入第三方源码jar包遇到的坑》
最近想做个app,里面需要有一个二维码扫描的功能,然后谷歌之后发现Zxing这个用的人好多,就看看怎么用: 然后就在github上拉下他们的源码,导入eclipse,然后编译之后导出为jar文件[用的 ...
随机推荐
- 大数据 --> 分布式文件系统HDFS的工作原理
分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数 ...
- /var/spool/clientmqueue目录下存在大量文件的原因及解决方法
问题现象:linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件.原因分析: 系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给c ...
- 外部 Storage Provider - 每天5分钟玩转 Docker 容器技术(149)
如果 Kubernetes 部署在诸如 AWS.GCE.Azure 等公有云上,可以直接使用云硬盘作为 Volume,下面是 AWS Elastic Block Store 的例子: 要在 Pod 中 ...
- 利用jmeter做一个简单的性能测试并进行参数化设置
1.新增一个线程组,并在下面添加基本原件,包括:监听器.http请求默认值和一个事务控制器 在http请求默认值中填写 ip 地址和端口号,协议类型默认为http 2.添加代理服务器,以便之后进行录制 ...
- Beta第四天
听说
- Linux kernel 的 sendfile 是如何提高性能的
Linux kernel 的 sendfile 是如何提高性能的 现在流行的 web 服务器里面都提供 sendfile 选项用来提高服务器性能,那到底 sendfile 是什么,怎么影响性能的呢? ...
- tornado web高级开发项目
抽屉官网:http://dig.chouti.com/ 一.配置(settings) settings = { 'template_path': 'views', #模板文件路径 'static_pa ...
- 《高级软件测试》Linux平台Jira的安装与配置
现在大部分的程序开发都是在linux下进行的,jira更多的时候是安装在linux上,那么,如何在linux下安装配置jira呢?本文将以Ubuntu 17.10和jira7.5.2为例,对linux ...
- UDP协议实现客户服务器数据交互
UDP协议实现客户服务器数据交互 按照往常一样将今天自己写的题目答案写在了博客上习题:客户端循环发送消息给服务端,服务端循环接收,并打印出来,直到收到Bye就退出程序. package network ...
- 微信小程序tab(swiper)切换
<- wxml -> <view class="youhui"> <view ' bindtap='toggle'> 未使用 </view ...