zoukankan      html  css  js  c++  java
  • IOC依赖注入-AutoFac 使用

    示例效果:

    示例项目创建步骤:

    1.创建一个MVC项目 AutoFacDemo

     安装AutoFac    

      install-package Autofac -version 5.2.0  -projectname AutoFacDemo

      install-package Autofac.Mvc5 -version 5.0.0 -projectname AutoFacDemo

    2.创建控制器类,首先在项目中创建一个Infrastructure文件夹,在其中创建类IocConfig

     

    using Autofac;
    using Autofac.Integration.Mvc;
    using AutoFacDemo.Abstract;
    using AutoFacDemo.Services;
    using System.Web.Mvc;
    namespace AutoFacDemo.Infrastructure
    {
    public class IocConfig
    {
    public static void RegisterDependencies()
    {
    var builder = new ContainerBuilder();   //创建一个容器,和Ninject注入器创建一个Kernenl类似
    builder.RegisterControllers(typeof(MvcApplication).Assembly);  //把当前框架的启动项类加入到容器中(位于Global.asax文件中)
    builder.RegisterType<EFProductRepository>().As<IProductRepository>();//注册类与接口,类似Ninject的kernel.Bind<C>().to<I>()
    //autofac注册依赖
    IContainer container = builder.Build();  //实例化容器
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); //利用System.Web.Mvc的DependencyResolver.SetResolver() 来注册要注入的依赖对象,这里传入的是container,如果是Ninject 则直接传入IKernel 引用 kernel

    }

    }
    }

    3.在Global.asax文件中加入我们的IocConfig类中的静态方法,让程序启动时执行,这样就初步完成了AutoFac的以来注入框架了

    using AutoFacDemo.Infrastructure;
    using System.Web.Mvc;
    using System.Web.Routing;
    namespace AutoFacDemo
    {
    public class MvcApplication : System.Web.HttpApplication
    {
    protected void Application_Start()
    {
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    IocConfig.RegisterDependencies();
    }
    }
    }

    4.创建接口与实现类,这里用IProductRespository来模拟,在AutoFacDemo项目中创建Abstract 文件夹,在其中加入IProductRepository类文件

    using AutoFacDemo.Models;
    using System.Linq;
    namespace AutoFacDemo.Abstract
    {
    public interface IProductRepository
    {
    IQueryable<Product> Prouducts { get; }
    }
    }

    5.创建接口的实现类,在AutoFacDemo项目中创建Services文件夹,在其中创建EFProductRepository,并引入AutoFacDemo.Abstract和AutoFacDemo.Model命名空间

    using AutoFacDemo.Abstract;
    using AutoFacDemo.Models;
    using System.Linq;

    namespace AutoFacDemo.Services
    {
    public class EFProductRepository : IProductRepository
    {
    private EFDbContext dbContext = new EFDbContext();  //这里使用了EF框架
    public IQueryable<Product> Prouducts
    {
    get
    {
    return dbContext.Products.AsQueryable();
    }
    }
    }
    }

    6.创建数据库实体框架类EFDbContext,因为这里使用的了EF,因此需要安装EntityFramework,并在配置文件中添加数据库连接信息如下(绿色文字):

    <connectionStrings>
    <add name="sqlserverconn" connectionString="Server=WIN-HD8JVF2J0A0;Database=SportsStore;User Id=sa;Password=sundh1981@163.com;" providerName="System.Data.SqlClient"/>
    </connectionStrings>

    using AutoFacDemo.Models;
    using System.Data.Entity;
    namespace AutoFacDemo.Services
    {
    public class EFDbContext:DbContext
    {
    public EFDbContext() : base("name=sqlserverconn") { }  //在配置文件中增加数据库链接字符串:

    public DbSet<Product> Products { get; set; }

    }
    }

    7.创建模型类(这里需要引用 using System.ComponentModel.DataAnnotations.Schema;为了使用注解来映射数据表中的字段和表名)

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations.Schema;
    namespace AutoFacDemo.Models
    {
    [Table("Products")]
    public class Product
    {
       public int ProductId { get; set; }
       [Column("Name")]
       public string ProductName { get; set; }
       public decimal Price { get; set; }
       public string Category { get; set; }
       public string Description { get; set; }
    }
    }

    8.创建控制器,在Controllers文件夹中创建控制器类,修改App_Start文件夹下的路由文件RouteConfig.cs,把Home改成 Buy,并把项目的Web属性改为特定页,启动项目即可

    using AutoFacDemo.Abstract;
    using System.Web.Mvc;
    namespace AutoFacDemo.Controllers
    {
    public class BuyController : Controller
    {
    private IProductRepository repository;
    public BuyController(IProductRepository repo)   //有了前面的功课,我们这里就可以放心的使用接口参数了,不用考虑实例化的问题了,那是Autofac应该干的事
    {
    repository = repo;
    }
    // GET: Buy
    public ActionResult Index()
    {
    return View(repository.Prouducts);  //这里用一个简单的视图来返回从数据库中获取的结果,即如图开始部分
    }
    }
    }

  • 相关阅读:
    jQuery dataType指定为json的问题
    C# Post数据和接收简单示例【转】
    搜集的关于领域驱动设计(DDD)的理论知识
    WCF:(400) Bad Request
    关于SQL生成随机字符串
    如何通过禁用按钮避免jQuery.ajax重复请求
    注册自定义HTTP Handlers
    Node.js+Express on IIS
    iframe在IE下不能写cookie的解决
    node.js从全局目录里加载module
  • 原文地址:https://www.cnblogs.com/sundh1981/p/13895669.html
Copyright © 2011-2022 走看看