zoukankan      html  css  js  c++  java
  • AutoFac在Asp.net MVC中使用

    使用工具:VS2015 基于.NET fromwork4.6.1

    1.创建ASP.NET Web 应用程序

     2.选择一个空结构的MVC项目

     3.项目结构:

     4.创建控制器 和 视图

     5.新建两个类库项目IServices/IBll  一个用来声明接口,一个用来实现

    ISerivces:

     public interface ISqlHelper
        {
    
            /// <summary>
            /// 查询
            /// </summary>
            /// <param name="sql"></param>
            /// <returns>sql</returns>
            string SeaechSql(string sql);
            /// <summary>
            /// 执行
            /// </summary>
            /// <param name="sql"></param>
            /// <returns>影响行数</returns>
            int ExecSql(string sql);
        }

     public interface IFtpHelper
        {
            bool SendFile(string path);
            bool DownFile(string path);
        }

    IBll:

     public class OracleHepler : ISqlHelper
        {
            public int ExecSql(string sql)
            {
                //SQL
                return new Random().Next(2);
            }
    
            public string SeaechSql(string sql)
            {
                //SQL
                return sql;
            }
        }
    public class FtpHelper : IFtpHelper
        {
            /// <summary>
            /// 文件路径验证
            /// </summary>
            private Regex regex =  new  Regex(@"^[a-zA-Z]:((\+[^/:*?""<>|]+)+)s*$");
    
            public bool DownFile(string path)
            {                     
                if (regex.IsMatch(path))
                {
                    Console.WriteLine($"下载成功:路径{path}");
                    return true;                      
                }
                Console.WriteLine($"格式错误:路径{path}");
                return false;
            }
    
            public bool SendFile(string path)
            {
                if (regex.IsMatch(path))
                {
                    Console.WriteLine($"传输成功:路径{path}");
                    return true;
                }
                Console.WriteLine($"格式错误:路径{path}");
                return false;
            }
        }

    在MVC项目中配置AutoFac:

    Global:

     public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                RouteConfig.RegisterRoutes(RouteTable.Routes);
    
                var build = new ContainerBuilder(); //构建容器
                build.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired(); //依赖注入当前应用程序下的所有Controller
    
                Assembly asm = Assembly.Load("IBll");  //加载 IBLL下应用程序集
                build.RegisterAssemblyTypes(asm).Where(t => !t.IsAbstract).AsImplementedInterfaces().PropertiesAutowired();  //依赖注入IBLL下所有非抽象类的接口实现类
    
                var container = build.Build(); //构建
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); //全局注册使用设置
            }
        }

    Control:

     public class DefaultController : Controller
        {
            public IFtpHelper ftp { get; set; }
            // GET: Default
            public ActionResult Index()
            {
                bool bl= ftp.DownFile("ftp://loaclhost:5000/ftp/1.txt");
                return Content(bl.ToString());
            }
        }

    运行结果:

     在非Controller类中使用AutoFac:【DependencyResolver.Current.GetService<ISqlHelper>();】

    1.添加类Tools

     public class Tools
        {

          public static int Test()
          {
            ISqlHelper help = DependencyResolver.Current.GetService<ISqlHelper>();
            return help.ExecSql("update table set x=y where a=b");
          }

        }

    在Controller中去调用Tool. Test

     public class DefaultController : Controller
        {
            public IFtpHelper ftp { get; set; }
            // GET: Default
            public ActionResult Index()
            {
               /* bool bl = ftp.DownFile("ftp://loaclhost:5000/ftp/1.txt"); */
    
                return Content(Tools.Test().ToString());
            }
        }

    执行结果

    在子线程中使用AutoFac

    PM=> install-package quartz -version 2.6.1

     新建 MyJob 定时类

    下图为错误用法,无法使用

     Golbal中配置计划和定时

     public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                RouteConfig.RegisterRoutes(RouteTable.Routes);
    
                var build = new ContainerBuilder();
                build.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
    
                Assembly asm = Assembly.Load("IBll");
                build.RegisterAssemblyTypes(asm).Where(t => !t.IsAbstract).AsImplementedInterfaces().PropertiesAutowired();
    
                var container = build.Build();
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    
                {
                    IScheduler scheduler;
                    //调度器工厂
                    ISchedulerFactory factory;
    
                    //创建一个调度器
                    factory = new StdSchedulerFactory();
                    scheduler = factory.GetScheduler();
                    scheduler.Start();
                    //2、创建一个任务
                    IJobDetail job = JobBuilder.Create<MyJob>().WithIdentity("job1", "group1").Build();
    
                    //3、创建一个触发器
                    //DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
                    ITrigger trigger = TriggerBuilder.Create()
                        .WithIdentity("trigger1", "group1")
                        .WithCronSchedule("0/5 * * * * ?")     //5秒执行一次
                                                               //.StartAt(runTime)
                        .Build();
    
                    //4、将任务与触发器添加到调度器中  
                    scheduler.ScheduleJob(job, trigger);
                    //5、开始执行
                    scheduler.Start();
                }
            }
        }

    调式看结果:

     正确使用MyJob中使用:

        public class MyJob : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
                try
                {       
                    ISqlHelper sql;
                    var container = AutofacDependencyResolver.Current.ApplicationContainer;
                    using (container.BeginLifetimeScope())
                    {
                        sql = container.Resolve<ISqlHelper>();
                        string s = sql.SeaechSql("SELECT *FROM TABLENAME");
                        File.WriteAllText($"../App_Data/{DateTime.Now.ToString("yyyyMMddHHmissfff")}.txt", s);
                    }                                                                                                                       
                }
                catch (System.Exception e)
                {
                    File.WriteAllText($"{HostingEnvironment.MapPath("~/")}/App_Data/{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.txt", e.Message);
                }
                
            }
        }
  • 相关阅读:
    今天分享一个参数转Python字典的案例
    Django 列表搜索后,进行数据编辑,保存后返回搜索前的页面 && 多条件搜索
    django 中多条件搜索
    selenium 对滑动验证框的处理
    django 中使用request请求失败,requests.exceptions.ConnectionError: HTTPConnectionPool(host='xxx', port=80):
    java Spring boot 单元测试 @Autowired 注入为空
    Vue中显示js格式插件vue-json-viewer
    Vue-cli项目中过滤器使用
    Vue 中权限校验
    Vue平台项目问题汇总
  • 原文地址:https://www.cnblogs.com/Zingu/p/14708704.html
Copyright © 2011-2022 走看看