Files
U8API/UFIDA.U8.Framework.Api/Global.asax.cs
T

105 lines
3.8 KiB
C#

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;
private readonly string s_u8workflow;
private readonly string s_u8BusinessNotify;
public WebApiApplication()
{
s_u8Root = GetU8InstallPath();
s_u8MPath = $@"{s_u8Root}U8M\";
s_u8FrameworkPath = $@"{s_u8Root}Framework\";
s_u8APIFramework = $@"{s_u8Root}UFMOM\U8APIFramework\";
s_u8workflow = $@"{s_u8Root}Workflow\Lib\";
s_u8BusinessNotify = $@"{s_u8Root}BusinessNotify\";
}
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<GMUtil>().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 += @"\";
}
/// <summary>
/// 缺少程序集全局处理事件
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
/// <returns></returns>
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);
if (File.Exists(s_u8workflow + sAsmName))
return Assembly.LoadFrom(s_u8workflow + sAsmName);
if (File.Exists(s_u8BusinessNotify + sAsmName))
return Assembly.LoadFrom(s_u8BusinessNotify + sAsmName);
return null;
}
}
}