SQL Table 自动生成Net底层-控制器Autofac注入

自动生成BaseController注入业务接口

        public static string DataTableToAutoface(DataTable dt,string nameSpace)
        {
            StringBuilder sb = new StringBuilder();

            StringBuilder sbContent = new StringBuilder();
            for (var i = 0; i < dt.Rows.Count; i++)
            {
                sbContent.AppendFormat(@"
        public I{0} I{0}
        {{
            get {{ return DependencyResolver.Current.GetService<I{0}>() as I{0}; }}
        }}", dt.Rows[i]["name"] + "Service");
            }

            sb.AppendFormat(@"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Autofac;
using {0}.Mapping;
using {0}.IService;

namespace {0}.UIBase.Controllers
{{
    /// <summary>
    /// 系统控制器层注入入口(统一生成请不要修改文件)
    /// </summary>
    public partial class BaseController : Controller
    {{
        {1}
    }}
}}", nameSpace, sbContent);
            return sb.ToString();

        }
View Code

Global.asax

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

        protected void Application_Start()
        {
       
            var builder = new ContainerBuilder();
            builder.RegisterModule(new ConfigurationSettingsReader("命名"));
            Assembly[] asm = PluginHelper.GetAllAssembly().ToArray();

            //Assembly.LoadFrom(Path.GetFileNameWithoutExtension("SharpSvn.dll"));
            builder.RegisterAssemblyTypes(asm);
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());
            builder.RegisterModelBinderProvider();
            builder.RegisterFilterProvider();//注册Filter        
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            AreaRegistration.RegisterAllAreas();
            RegisterRoutes(RouteTable.Routes);
        }
View Code

PluginHelper

        /// <summary>
        /// 根据名称获取dll程序集
        /// </summary>
        /// <param name="dllName"></param>
        /// <returns></returns>
        public static List<Assembly> GetAllAssembly(string dllName = "*.Area.dll")
        {            
            List<string> pluginpath = FindPlugin(dllName);
            List<Assembly> list = new List<Assembly>();
            Assembly asm = null;
            foreach (string filename in pluginpath)
            {
                try
                {
                    string asmname = Path.GetFileNameWithoutExtension(filename);
                    if (asmname != string.Empty)
                    {
                        asm = Assembly.LoadFrom(filename);
                        list.Add(asm);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
            }
            return list;
        }


        //查找所有插件的路径
        static List<string> FindPlugin(string dllName)
        {
            List<string> pluginpath = new List<string>();
            try
            {
                string path = AppDomain.CurrentDomain.BaseDirectory;
                string dir = Path.Combine(path, "bin");
                string[] dllList = Directory.GetFiles(dir, dllName);
                if (dllList != null && dllList.Length > 0)
                {
                    foreach (var item in dllList)
                    {
                        pluginpath.Add(Path.Combine(dir, item.Substring(dir.Length + 1)));
                    }
                }
            }
            catch (Exception ex)
            {

            }
            return pluginpath;
        }
View Code

 

配置文件

<configSections>
    <section name="module" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
  </configSections>
  <lq-module>
    <modules>
      <module type="命名空间.Service,命名空间"></module>
      <module type="命名空间.Repository,命名空间"></module>
    </modules>
  </lq-module>
</configuration>

web.config
  <命名>
    <files>
      <file name="Config/Module.config" section="module" />
    </files>
  </命名>
View Code

 

posted @ 2017-12-16 16:17  plming  阅读(108)  评论(0编辑  收藏  举报