zoukankan      html  css  js  c++  java
  • .NET MVC5+ EF+AutoFac自动注入框架

    1、创建一个MVC系统 VIEW显示页面代码:

    <link href="~/Content/bootstrap.css" rel="stylesheet" />
    
    @model List<EFAutofacMVC.Models.TRA_BargainOrder_Test>
    @{
        ViewBag.Title = "index";
    }
    
    <div class="well">
        <table class="table">
            <tr>
                <th>订单编号</th>
                <th>城市代号</th>
                <th>时间</th>
                <th>订单状态</th>
            </tr>
            <tbody>
                @if (Model != null && Model.Any())
                {
                    foreach (var item in Model)
                    {
                        <tr>
                            <td>@item.BargainOrderCode </td>
                            <td>@item.CityCode </td>
                            <td>@item.UpdateTime </td>
                            <td>@item.OrderStatus </td>
    
                        </tr>
    
                    }
    
                }
            </tbody>
    
    
        </table>
    </div>

    2、Controller控制器

    using EFAutofacMVC.Models;
    using Microsoft.Extensions.Caching.Distributed;
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Mvc.Html;
    
    namespace EFAutofacMVC.Controllers
    {
        public class HomeController : Controller
        {
            /// <summary>
            /// 数据库连接
            /// </summary>
            private readonly DefaultDbContext _DbContext;
            
    
            //构造器注入
            public HomeController(DefaultDbContext context)
            {
    
                _DbContext = context;
            }
    
            public ActionResult Index()
            {
                
    
    
                var data = _DbContext.TRA_BargainOrders.ToList();
    
    
    
                return View(data);
            }
    
        }
    }

    3、models实体类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace EFAutofacMVC.Models
    {
        public class TRA_BargainOrder_Test
        {
            public int ischeck
            {
                get; set;
            }
    
            public long TRA_BargainOrder_TestID
            {
                get; set;
            }
    
            /// <summary>
            /// 订单编号
            /// </summary>
            public string BargainOrderCode
            {
                get; set;
            }
            /// <summary>
            /// 城市代号
            /// </summary>
            public string CityCode
            {
                get; set;
            }
    
            public string ParkUserId
            {
                get; set;
            }
    
    
            public int FlowStatus
            {
                get; set;
            }
    
            public DateTime UpdateTime
            {
                get; set;
            }
    
            public int OrderStatus
            {
                get; set;
            }
    
            public int PayStatus
            {
                get; set;
            }
    
    
            public DateTime CreateTime
            {
                get; set;
            }
            public string ExpressCode { get; set; }
            /// <summary>
            /// 用户ID
            /// </summary>
            public int UserID { get; set; }
        }
    }

    4、EF数据库连接

    using System;
    using System.Data.Entity;
    namespace EFAutofacMVC.Models
    {
        public class DefaultDbContext : DbContext,IDependency
        {
            public DefaultDbContext():base("SQLConnectionString")
            {
                
            }
    
            /// <summary>
            /// 交易订单信息
            /// </summary>
            public DbSet<TRA_BargainOrder_Test>TRA_BargainOrders{ get; set; }
    
          
        }
    }

     5、仓储接口

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace EFAutofacMVC.IRepository
    {
    
        /// <summary>
        /// Autofac提供一个RegisterAssemblyTypes方法。它会去扫描所有的dll并把每个类注册为它所实现的接口。既然能够自动注入,那么接口和类的定义一定要有一定的规律。我们可以定义IDependency接口的类型,其他任何的接口都需要继承这个接口。
        /// </summary>
        public interface IDependency
        {
        }
    }

    6、Global.asax 文件配置

    using Autofac;
    using Autofac.Integration.Mvc;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    
    
    namespace EFAutofacMVC
    {
        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();
                Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
                //注册所有实现了 IDependency 接口的类型
                Type baseType = typeof(IDependency);
                builder.RegisterAssemblyTypes(assemblies)
                       .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
                       .AsSelf().AsImplementedInterfaces()
                       .PropertiesAutowired().InstancePerLifetimeScope();
    
                //注册MVC类型
                builder.RegisterControllers(assemblies).PropertiesAutowired();
                builder.RegisterFilterProvider();
                var container = builder.Build();
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    
                #endregion
    
    
                #region 手动一个一个的进行注入
    
                // //创建autofac管理注册类的容器实例
                // var builder = new ContainerBuilder();
                // //为这个容器注册它可以管理的类型
                // //builder的Register方法可以通过多种方式注册类型。
                // builder.RegisterType<UserInfoRepository>().As<IUserInfoRepository>();
                // //使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册
                // builder.RegisterControllers(Assembly.GetExecutingAssembly());//生成具体的实例
                // //如果使用属性注入 就把上面这句改为
                ////builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); // 这样支持属性注入
                // var container = builder.Build();
                // //下面就是使用MVC的扩展 更改了MVC中的注入方式.
                // DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    
    
                #endregion
    
            }
    
        }
    }

    7 、其余就是在线安装引用ef以及autofac框架的相关包了

  • 相关阅读:
    hdu--2522--循环节
    hdu--2523--读懂题意....
    hdu--1073--字符串处理
    hdu--1114--完全背包
    C#写入对象到XML/从XML读取对象
    C#打开另一个窗体
    Intent启动照片或者相机
    ViewGroup
    上传文件的表单
    添加菜单到fragment
  • 原文地址:https://www.cnblogs.com/Warmsunshine/p/9082919.html
Copyright © 2011-2022 走看看