AutoFac+MVC+WebApi源码----我踩过的坑

 2023-09-10 阅读 14 评论 0

摘要:发现网上关于AutoFac的Demo源码比较少,综合MVC和WepApi的更少。所以贴出源码 WebApi项目(MVC4不需要引用,历史遗留问题,人懒没删) mvc和webapi区别、 建项目 新建类库IAutoFacDal(接口),AutoFacDal,IAutoFa

发现网上关于AutoFac的Demo源码比较少,综合MVC和WepApi的更少。所以贴出源码

WebApi项目(MVC4不需要引用,历史遗留问题,人懒没删)

mvc和webapi区别、

 

建项目

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

mvc源码? 

新建WebApi

AutoFacEntity

webapi和mvc的区别,User源码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace AutoFacEntity.DBModel
 8 {
 9     public class User
10     {
11         /// <summary>
12         /// 姓名
13         /// </summary>
14         public string Name { get; set; }
15         /// <summary>
16         /// 年龄
17         /// </summary>
18         public int Age { get; set; }
19         /// <summary>
20         /// 性别
21         /// </summary>
22         public string Sex { get; set; }
23     }
24 }
User

 

AutoFacDto

auto.js源码。UserAddInputDto源码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace AutoFacDto.Input
 8 {
 9     public class UserAddInputDto
10     {
11         /// <summary>
12         /// 姓名
13         /// </summary>
14         public string Name { get; set; }
15         /// <summary>
16         /// 年龄
17         /// </summary>
18         public int Age { get; set; }
19         /// <summary>
20         /// 性别
21         /// </summary>
22         public string Sex { get; set; }
23     }
24 }
UserAddInputDto

UserModel源码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace AutoFacDto.Model
 8 {
 9     public class UserModel
10     {
11         /// <summary>
12         /// 姓名
13         /// </summary>
14         public string Name { get; set; }
15         /// <summary>
16         /// 年龄
17         /// </summary>
18         public int Age { get; set; }
19         /// <summary>
20         /// 性别
21         /// </summary>
22         public string Sex { get; set; }
23     }
24 }
UserModel

UserAddOutputDto源码

 1 using AutoFacDto.Model;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 namespace AutoFacDto.Output
 9 {
10     public class UserAddOutputDto
11     {
12         public UserModel Info { get; set; }
13     }
14 }
UserAddOutputDto

 

IAutoFacDal 

IUserDal

IUserDal源码

 1  1 using AutoFacDto.Input;
 2  2 using AutoFacDto.Model;
 3  3 using AutoFacDto.Output;
 4  4 using System;
 5  5 using System.Collections.Generic;
 6  6 using System.Linq;
 7  7 using System.Text;
 8  8 using System.Threading.Tasks;
 9  9 
10 10 namespace IAutoFacDal.User
11 11 {
12 12     public interface IUserDal
13 13     {
14 14         UserAddOutputDto UserAdd(UserAddInputDto input);
15 15     }
16 16 }
View Code

AutoFacDal

UserDal源码(另一个类无视)

 1 using IAutoFacDal.User;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 using AutoFacDto.Input;
 8 using AutoFacDto.Output;
 9 using AutoFacDto.Model;
10 
11 namespace AutoFacDal.User
12 {
13     public class UserDal : IUserDal
14     {
15         public UserAddOutputDto UserAdd(UserAddInputDto input)
16         {
17             UserAddOutputDto output = new UserAddOutputDto { Info=new UserModel()};
18             output.Info.Age = input.Age;
19             output.Info.Name = input.Name+"--默认调用";
20             output.Info.Sex = input.Sex;
21             return output;
22         }
23     }
24 }
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是我测试替换数据源的,可以无视)

 1 using IAutoFacLogic.User;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 using AutoFacDto.Input;
 8 using AutoFacDto.Output;
 9 using IAutoFacDal.User;
10 
11 namespace AutoFacLogic.User
12 {
13     public class UserLogic : IUserLogic
14     {
15         public IUserDal iServerUerDal;
16 
17         public UserLogic(IUserDal param)
18         {
19             iServerUerDal = param;
20         }
21         public UserAddOutputDto UserAdd(UserAddInputDto input)
22         {
23             return iServerUerDal.UserAdd(input);
24         }
25     }
26 }

 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());//注入APibuilder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);//注入APibuilder.RegisterWebApiModelBinderProvider();//注入APivar container = builder.Build();DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//注入Controllervar webApiResolver = new AutofacWebApiDependencyResolver(container);    //注入APiGlobalConfiguration.Configuration.DependencyResolver = webApiResolver;  //注入APi
        }/// <summary>/// 注入规则/// </summary>/// <param name="builder"></param>protected void SetupResolveRules(ContainerBuilder builder){//UI项目只用引用service和repository的接口,不用引用实现的dll。//如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dllvar 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代替UserOldbuilder.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

 

转载于:https://www.cnblogs.com/shacoli/p/8523866.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/32535.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息