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文件[用的 ...
随机推荐
- 0x02 译文:Windows桌面应用Win32第一个程序
本节课我们将用C++ 写一个最简单的Windows 程序. 目录: 创建一个窗口 窗口消息 编写窗口过程 绘制窗口 关闭窗口 管理应用程序状态 代码如下: #ifndef UNICODE #defin ...
- 客户端(winform)更新
winform更新有两种情况,一种是在线更新在线使用:直接右击项目发布出去就可以更新在线使用了.还有一种更新是不用一直连接网络的模式. 1:C#Winform程序如何发布并自动升级--------ht ...
- 巨人大哥谈Java中的Synchronized关键字用法
巨人大哥谈Java中的Synchronized关键字用法 认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就 ...
- JavaScript(第十九天)【DOM进阶】
学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元素节点,再比如Text类型:表示的是文本节 ...
- java封装的概念
继承.封装.多态.抽象是面向对象编程的四大基本概念,其中封装尤为重要,因为从我们学习JAVA开始,就基本上接触了封装,因为JAVA中的所有程序都是写在类中的,类也能当做一种封装. 在面向对象中封装是指 ...
- 团队作业7——第二次项目冲刺(Beta版本12.08-12.10)
1.当天站立式会议照片 本次会议内容:1:每个人汇报自己完成的工作.2:组长分配各自要完成的任务. 2.每个人的工作 黄进勇:项目整合,后台代码. 李勇:前台界面优化. 何忠鹏:数据库模块. 郑希彬: ...
- 怎么去理解JAVA中类与对象的关系
首先要明确,在现实生活中,每一个物体都有自己的基本特征,专业一点也可以说成是属性有些甚至还有一定的行为.例如 汽车的特征:有车门.有轮胎.颜色各一等等,行为:有行驶,开车门,开车灯,等等.有这些属性和 ...
- Django-rest-framework源码分析----权限
添加权限 (1)API/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 # utils/permission.py class SVIPPr ...
- Mego(06) - 关系数据库建模
框架中提供了多种数据注释以便可以全面的描述数据库结构特性. 自增列 可以使用注释声明指定列是数据库自增列,同时能指定自增的起始及步长. public class Blog { [Identity(, ...
- BizTalk Server 2016配置 WCF SAP Adapter
BizTalk Server 2016配置 WCF SAP Adapter 最近公司内部需要使用BizTalk与SAP 系统进行对接,虽然SAP/PI可以以发布WebService 的方式实现与外部系 ...