.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框架的相关包了

转载于:https://www.cnblogs.com/Warmsunshine/p/9082919.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值