Asp.net mvc中应用autofac
1.nuget安装依赖
2.配置注入规则(Global.asax)
using Autofac; using Autofac.Integration.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace BestExpress { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); #region Autofac注入依赖 var builder = new ContainerBuilder(); SetupResolveRules(builder); builder.RegisterControllers(Assembly.GetExecutingAssembly()); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); #endregion } private static void SetupResolveRules(ContainerBuilder builder) { builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces();
//注册泛型规则
builder.RegisterGeneric(typeof(EntRegCRUDService<>)).As(typeof(ICRUDService<>));
} } }
crud注入Controller
private ICRUDService<X6_EntryRegistration> _crud; public X6_EntryRegistrationController(ICRUDService<X6_EntryRegistration> crud) { _crud = crud; }
//基于SqlSugarOrm的依赖注入:
interface:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EntryRegistration.Models { public interface IDBService<T> : IDisposable { T GetDBInstance(); } }
//实现类
using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace EntryRegistration.Models { public class SqlServerService : IDBService<SqlSugarClient> { public SqlSugarClient _db; public SqlServerService() { string ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); _db = new SqlSugarClient(ConnectionString);//获SqlSugarClient对象 } public SqlSugarClient GetDBInstance() { return _db; } public void Dispose() { if (_db != null) { _db.Dispose(); } } } }
在控制器中的注入:
private SqlSugarClient _db; public ViewController(IDBService<SqlSugarClient> db) { _db = db.GetDBInstance(); }
CRUD:
//interface
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc; namespace EntryRegistration.Models.CRUD { public interface ICRUDService<T> { /// <summary> /// 添加 /// </summary> /// <returns></returns> ActionResult Add(T obj); /// <summary> /// 删除 /// </summary> /// <param name="obj"></param> /// <returns></returns> ActionResult Del(Guid VGUID); /// <summary> /// 编辑 /// </summary> /// <param name="obj">当前类型实例</param> /// <returns></returns> ActionResult Edit(T obj); /// <summary> /// 通过主表ID查列表 /// </summary> /// <param name="EntryRegistrationID"></param> /// <returns></returns> ActionResult Select(Guid EntryRegistrationID); } }
//实现类
using Best.Entities.Tables; using EntryRegistration.Models.CRUD; using EntryRegistration.Models.Entity; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace EntryRegistration.Models.CRUD { public class EntRegCRUDService<T> : ICRUDService<T> where T : class, new() { private SqlSugarClient _db; public EntRegCRUDService(IDBService<SqlSugarClient> db) { _db = db.GetDBInstance(); } /// <summary> /// 添加方法实现 /// </summary> /// <param name="obj"></param> /// <returns>Json结果</returns> public ActionResult Add(T obj) { ActionResultModel<string> result = new ActionResultModel<string>(); try { if (typeof(T) != typeof(X6_EntryRegistration)) { obj.GetType().GetProperty("VGUID").SetValue(obj, Guid.NewGuid()); } #region 数据验证 //必填验证 CheckResult checkResult = Models.Check.CheckRequire<T>(obj); if (checkResult.isSuccess != true) { return JsonHandle.GetResult(false, checkResult.msg); } #endregion //数据插入 var IsSuccess = _db.Insert(obj); if (IsSuccess.ToString() == "true") { return JsonHandle.GetResult(true, "数据插入成功"); } else { return JsonHandle.GetResult(false, "数据插入失败"); } } catch (Exception ex) { result.isSuccess = false; result.responseInfo = ex.Message; } return JsonHandle.GetResult(result.isSuccess, result.responseInfo); } /// <summary> /// 删除方法实现 /// </summary> /// <param name="VGUID"></param> /// <returns>Json结果</returns> public ActionResult Del(Guid VGUID) { ActionResultModel<string> result = new ActionResultModel<string>(); try { bool isSuccess = _db.Delete<T, Guid>(VGUID); if (isSuccess == true) { return JsonHandle.GetResult(true, "删除成功"); } else { return JsonHandle.GetResult(false, "删除失败"); } } catch (Exception ex) { result.isSuccess = false; result.responseInfo = ex.Message; } return JsonHandle.GetResult(result.isSuccess, result.responseInfo); } /// <summary> /// 编辑方法实现 /// </summary> /// <param name="obj"></param> /// <returns>Json结果</returns> public ActionResult Edit(T obj) { ActionResultModel<string> result = new ActionResultModel<string>(); try { var VGUID = obj.GetType().GetProperty("VGUID").GetValue(obj, null); bool isSuccess = _db.Update<T, Guid>(obj, Guid.Parse(VGUID.ToString())); if (isSuccess == true) { return JsonHandle.GetResult(true, "更新成功"); } else { return JsonHandle.GetResult(false, "更新失败"); } } catch (Exception ex) { result.isSuccess = false; result.responseInfo = ex.Message; } return JsonHandle.GetResult(result.isSuccess, result.responseInfo); } /// <summary> /// 查询方法实现 /// </summary> /// <param name="EntryRegistrationID"></param> /// <returns>Json结果</returns> public ActionResult Select(Guid EntryRegistrationID) { var list = _db.SqlQuery<T>("select * from " + typeof(T).Name + " where EntryRegistrationID=@EntryRegistrationID", new { EntryRegistrationID = EntryRegistrationID }) .ToList(); return JsonHandle.GetResult(list); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2015-08-07 本来想用jsonp来跨域请求的,但sb写接口的,不改返回值。。。只得在后台请求接口了。。。