AutoFac在MVC中的使用

参考网址:https://www.cnblogs.com/wyy1234/p/9144669.html

基本结构:AutoFacMvc作为ui层 ,IService类库(各种服务接口),Service类库(IService中接口的实现),Model类库(数据模型,这里使用EF)

我们的目的:实现MVC中的Controller和Service中的具体实现类解耦

 

获取用户列表的简单例子:

IService中的接口:

public interface IUserService
    {
        List<user> GetUsers();
    }

Service中的实现:

public class UserService:IUserService
    {
        //获取用户列表
        public List<user> GetUsers()
        {
            DbContext context = DbFactory.getDbContext();
            return context.Set<user>().ToList<user>();
        }
    }

DbFactory中的方法:

public static DbContext getDbContext()
        {
            var dbContext = CallContext.GetData("DbContext") as DbContext;
            if (dbContext == null)  //线程在数据槽里面没有此上下文
            {
                dbContext = new test1Entities(); //创建一个EF上下文
                CallContext.SetData("DbContext", dbContext);
                dbContext.Configuration.ProxyCreationEnabled = false;
            }
            return dbContext;
        }

第一步:通过nuget程序包管理器添加autofac的包

第二步:在App_Start文件夹中添加一个AutofacConfig类

public class AutofacConfig
    {
        /// <summary>
        /// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建
        /// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作
        /// </summary>
        public static void Register()
        {
            //实例化一个autofac的创建容器
            var builder = new ContainerBuilder();
            //告诉Autofac框架,将来要创建的控制器类存放在哪个程序集 (AutoFacMvcDemo)
            Assembly controllerAss = Assembly.Load("AutoFacMvcDemo");
            builder.RegisterControllers(controllerAss);

            //如果有Dal层的话,注册Dal层的组件
            //告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例
            //Assembly dalAss = Assembly.Load("Dal");
            //创建respAss中的所有类的instance以此类的实现接口存储
            //builder.RegisterTypes(dalAss.GetTypes()).AsImplementedInterfaces();

            //告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例
            Assembly serviceAss = Assembly.Load("Service");
            //创建serAss中的所有类的instance以此类的实现接口存储
            builder.RegisterTypes(serviceAss.GetTypes()).AsImplementedInterfaces();


            //创建一个Autofac的容器
            var container = builder.Build();
            //将MVC的控制器对象实例 交由autofac来创建
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    }

第三步:在Global.asax调用AutofacConfig类中的Register方法,注册组件

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //注册组件
            AutofacConfig.Register();
        }
    }

第四步:简单测试

homeController

private IUserService userService;
        //通过构造器注入依赖
        public HomeController(IUserService _userService)
        {
            userService = _userService;
        }
        public ActionResult Index()
        {
            //不使用autofac时,service层和mvc ui层强耦合
            //UserInfoService userInfoService = new UserInfoService();
            //List<UserInfo> users= userInfoService.GetUsers();

            List<user> users = userService.GetUsers();
            return View(users);
        }

view

@{
    ViewBag.Title = "Home Page";
}
<h2>用户列表</h2>

@* 简单展示用户 *@

@model IEnumerable<Model.user>

<table>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.USERID</td>
            <td>@item.PASSWORD</td>
            <td>@item.ID</td>
        </tr>
    }
</table>

这样配置完之后会有报错   “未找到具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序的实体框架提...

先把Model中配置文件中的连接字符串复制到mvc项目中的webconfig中,再增加entity framework和mysql data entity两个引用

做完之后就没问题了。参考网址:https://www.cnblogs.com/taadis/p/12126169.html

测试结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值