发现网上关于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源码----我踩过的坑的更多相关文章

  1. Spring mvc之源码 handlerMapping和handlerAdapter分析

    Spring mvc之源码 handlerMapping和handlerAdapter分析 本篇并不是具体分析Spring mvc,所以好多细节都是一笔带过,主要是带大家梳理一下整个Spring mv ...

  2. eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南

    eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...

  3. 学习Spring5源码时所遇到的坑

    学习Spring5源码时所遇到的坑 0)本人下载的源码版本是 spring-framework-5.0.2.RELEASE 配置好gradle环境变量之后,cmd进入到spring项目,执行gradl ...

  4. ASP.NET MVC 4源码分析之如何定位控制器

    利用少有的空余时间,详细的浏览了下ASP.NET MVC 4的源代码.照着之前的步伐继续前进(虽然博客园已经存在很多大牛对MVC源码分析的博客,但是从个人出发,还是希望自己能够摸索出这些).首先有一个 ...

  5. 瞎折腾之 NHibernate ORM框架的接触(MVC + Repository源码)(一)

    在这炮火连天.技术更新迅猛的年代,不接触了解.甚至会用2~3种框架都不好意思说自己有多少年工作经验.况且出去面试也会有点吹牛的底子嘛. 这次折腾了NHibernate.其实这些ORM框架封装好了都是给 ...

  6. SpringtMVC中配置 <mvc:annotation-driven/> 与 <mvc:default-servlet-handler/> 源码解析

    上一篇有提到,当有.无这两个标签时,SpringtMVC 底层所采用的  HandlerMapping 以及 HandlerAdapter 是不一样的.现在就来进行源码调试,揭开 SpringtMVC ...

  7. kibana 5.5 源码编译踩坑记录

    由于项目需要定制开发kibana,因此需要编译kibana,在开发环境下运行.   注意:必须下载kibana 5.5的源码才能正常编译,下载release或者snapshot版本是不行的,运行npm ...

  8. Unix 网络编程卷一源码编译踩坑记录 ubtutu 19.10

    在阅读unpv1时运行源代码的环境配置,这里简单记录一下 源代码里的README 写得挺详细的,但是在Linux 系统的下还没没办法直接编译通过的, 这里我使用的是ubuntu 19.10(在腾讯云1 ...

  9. 《android 导入第三方源码jar包遇到的坑》

    最近想做个app,里面需要有一个二维码扫描的功能,然后谷歌之后发现Zxing这个用的人好多,就看看怎么用: 然后就在github上拉下他们的源码,导入eclipse,然后编译之后导出为jar文件[用的 ...

随机推荐

  1. 用C#开发的一个通用的地铁换乘查询工具

    日常生活中,上班下班坐地铁已经是常事,每当我想去某一个远一点的地方,如果有地铁首选就是地铁,因为方便嘛!每次坐地铁,我们都是凭肉眼去得出我们心中最佳的换乘方案,但是,如果对于线路较少的城市来说,这个方 ...

  2. 由浅入深理解----java反射技术

    java反射机制详解 java反射机制是在运行状态下,对任意一个类可以获取该类的属性和方法,对任意一个对象可以调用其属性和方法.这种动态的获取信息和调用对象的方法的功能称为java的反射机制 clas ...

  3. New UWP Community Toolkit - Carousel

    概述 New UWP Community Toolkit  V2.2.0 的版本发布日志中提到了 Carousel 的调整,本篇我们结合代码详细讲解  Carousel 的实现. Carousel 是 ...

  4. Eclipse+Pydev环境搭建

    1,准备好Eclipse和JAVA,x64 2,安装JDK,配置JAVA环境变量,假设安装路径为 C:\Program Files\Java\jdk1.8.0_161 在系统变量中,新建CLASSPA ...

  5. JDK1.8源码(六)——java.util.LinkedList 类

    上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个有链表 ...

  6. Django—urls系统:urls基础

    Django的urls系统简介 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映 ...

  7. Go语言的数组

    在 Go 语言里,数组是一个长度固定的数据类型,用于存储一段具有相同的类型的元素的连续块.数组存储的类型可以是内置类型,如整型或者字符串,也可以是某种结构类型. 1 数组特性 (1)内存是连续分配,C ...

  8. Tornado 用户身份验证框架

    1.安全cookie机制 import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def ge ...

  9. java从网络中下载图片到本地

    public class imageDownload { public static void main(String[] args) { String url = "http://loca ...

  10. 超绚丽CSS3多色彩发光立方体旋转动画

    CSS3添加了几个动画效果的属性,通过设置这些属性,可以做出一些简单的动画效果而不需要再去借助JavaScript.css3动画的属性主要分为三类:transform.transition以及anim ...