using Microsoft.JScript; using Microsoft.Win32; using System; using System.IO; using System.Reflection; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; using UFSoft.U8.U8M.Common; namespace UFIDA.U8.Framework.Api { public class WebApiApplication : HttpApplication { private readonly string s_u8Root; private readonly string s_u8MPath; private readonly string s_u8FrameworkPath; private readonly string s_u8APIFramework; public WebApiApplication() { s_u8Root = GetU8InstallPath(); s_u8MPath = $@"{s_u8Root}U8M\"; s_u8FrameworkPath = $@"{s_u8Root}Framework\"; s_u8APIFramework = $@"{s_u8Root}UFMOM\U8APIFramework\"; } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve; AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; } //private void ConfigureDependencyInjection(HttpConfiguration config) //{ // var builder = new ContainerBuilder(); // //builder.RegisterType().As<>(); // var container = builder.Build(); // config.DependencyResolver = new AutofacWebApiDependencyResolver(container); //} private static string GetU8InstallPath() { string root; var installPath = Registry.LocalMachine.OpenSubKey(GlobalConstDefine.Product_Registry_InstallKey); root = installPath == null ? Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) : installPath.GetValue(string.Empty).ToString(); return root += @"\"; } /// /// 缺少程序集全局处理事件 /// /// /// /// private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { //先在已经加载的程序集中选择 foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) { if (args.Name.Equals(asm.FullName)) return asm; } //取未加载的DLL名 var sAsmName = args.Name.Contains(",") ? $"{args.Name.Substring(0, args.Name.IndexOf(','))}.dll" : $"{args.Name}.dll"; //到指定的目录下找 if (File.Exists(s_u8Root + sAsmName)) return Assembly.LoadFrom(s_u8Root + sAsmName); if (File.Exists(s_u8MPath + sAsmName)) return Assembly.LoadFrom(s_u8MPath + sAsmName); if (File.Exists(s_u8FrameworkPath + sAsmName)) return Assembly.LoadFrom(s_u8FrameworkPath + sAsmName); if (File.Exists(s_u8APIFramework + sAsmName)) return Assembly.LoadFrom(s_u8APIFramework + sAsmName); return null; } } }