IOC容器<AutoFac>(.net framework)

IOC容器

  ---官方名:AutoFac

  ---自动实现控制反转,不需要借助工厂

   ---.net framework 不自带IOC容器<AutoFac>  需要自己引入

  背景:

    在使用工厂模式的情况下,当多个DAL时,就需要编写多个工厂一一照应(麻烦),所以借助AutoFac实现自动控制反转

 

    --参考代码笔记《专高六CMS--IOC容器(Autofac)《.net framework 》--案例运用.net framework MVC通过访问SqlServer和MySQL两种数据库完成对Autofac的剖解》

 

代码实现:

 

 

 

 

 

1、和“简单工厂”模式一样,首先定义个接口  --实现bll与dal解耦,实现依赖倒置

  1-1、DAL各个实现类继承接口并实现具体功能

   (可以有该商品多种型号---类似多个类继承同样一个接口 ) 

   《更普通解释:不同样式的鼠标插同一个USB接口》

     --继承接口这一操作就是官方概念的“依赖倒置

     (面向接口编程   上层模块不依赖于下层模块,而依赖于抽象)  

    

    ---继承同一接口,两个dal

                    

 

  1-2、BLL层构造注入

    

 

  1-3、控制器

         

 

    //当前直接运行报错

    

 

   1-4、解决:--因为没有注册   --Global.asax通过使用autofac注入(因为framework没有ioc容器--所以需要借助autofac-他就类似个ioc容器--core自带ioc容器-但是也可以不用自带的也用autofac)

    ①控制器安装Autofac包 +

    

 

     ②Global.asax通过使用autofac注入

      安装(安装)Autofac.MVC5  5.0.0

         

  public class MvcApplication : System.Web.HttpApplication
    {
        private static IContainer _container;
        public static IContainer Container
        {
            get
            {
                return _container;
            }
        }
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            //需要从Nuget里面引入(安装)Autofac.MVC5  5.0.0
            #region Autofac开始
            //通过 ContainerBuiler 的 Build 方法,得到 IContainer 容器
            ContainerBuilder builder = new ContainerBuilder();
            //配置接口与实现的映射
            //选择IOCdata的配置  --普通类  接口类
            builder.RegisterType<IOCdata>().As<IIOCdata>();

            //选择IOCdata2的配置        --普通类  接口类
            //builder.RegisterType<IOCdata2>().As<IIOCdata>();
            //注册BLL
            builder.RegisterType<IOCservice>();

            //UI层名称  --运用了反射知识
            Assembly webSystem = Assembly.Load("FrameWorkIOC");
            //由autofac来接管mvc 创建Controller      
            builder.RegisterControllers(webSystem).PropertiesAutowired();
            //把autofac的容器赋值给_container
            _container = builder.Build();
            //加载容器
            DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));
            #endregion


        }
    }
Global.asax.cs

 

    ④运行出现问题

    

 

    

 

    ---解决------放进viewbag中

         

    成功

        

  --用法:--这里切换就好了--比如用sqlserver库还是mysql库

  

 

  

 

 

 

 

 

  

 

 

     

 

posted @ 2022-04-23 16:46  じ逐梦  阅读(509)  评论(0)    收藏  举报