autofac 在MVC中使用的demo

autofac是一个简单很容易上手的net ioc插件。为什么要使用ioc呢?这个可以自行百度,我这边简单的理解就是解除程序之间的耦合度,便于项目维护(鬼知道杂便于啊)
不过现在不知道ioc这东西出去面试是真的掉档次,人家问你们项目啥结构啊。三层,这个算是比较初级的项目结构模式对于小项目来说还能接受。那么你回答说基于ioc依赖注入的多层结构,那么就会提升一个档次。另外在net core里系统自带的类库都是用ioc去实现了。所以这个ioc东西必须要了解下。
按我的理解 ioc也可以叫面向接口编程 首先你先写个接口,然后写过类实现接口,再把实现类和接口类都交给ioc容易。在调用的时候声明接口,让ioc把实现接口类注入进去。

声明个Model

 public class UserModel
    {
        public int ID { get; set; }
        public string UserName { get; set; }
    }

  

先声明接口

 public interface IUserRepositories
    {
       List<UserModel>  GetList();
    }

 然后再添加个类实现接口

 public class UserRepositories : IUserRepositories
    {
        public List<UserModel> GetList()
        {
            List<UserModel> list = new List<UserModel>();
            for (int i=1;i<=10;i++) {
                list.Add(new UserModel { ID = i, UserName = "张" + i });
            }

            return list;
        }
    }

  

然后在MVC下用nuget 添加autofac,autofac.mvc5(这个5或者4啥的根据自己的项目版本号来) 插件

然后在global下注册到ioc容器中

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            var builder = new ContainerBuilder();
            builder.RegisterType(typeof(UserRepositories)).As(typeof(IUserRepositories));
            builder.RegisterControllers(typeof(MvcApplication).Assembly);//注册所有的Controller
           // builder.RegisterModule<AutofacWebTypesModule>();
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    }

  然后在HomeController里就可以使用了

 public class HomeController : Controller
    {
        private readonly IUserRepositories _userRepositories;
        public HomeController(IUserRepositories userRepositories)//使用构造函数注入
        {
            _userRepositories = userRepositories;
        }
        // GET: Home
        public ActionResult Index()
        {
            ViewBag.List = _userRepositories.GetList();
            return View();
        }
    }

  

项目就脱离了new方式

转载于:https://www.cnblogs.com/xiaozhazhazha/p/8906985.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值