Add managed launcher part
[platform/core/dotnet/launcher.git] / Tizen.Runtime / Tizen.Runtime / AssemblyLoader.cs
1 using System;
2 using System.IO;
3 using System.Reflection;
4 using System.Runtime.Loader;
5 using System.Collections.Generic;
6
7 namespace Tizen.Runtime
8 {
9     public class AssemblyLoader : AssemblyLoadContext
10     {
11         private SortedSet<string> _dllDirectories = new SortedSet<string>();
12         public IEnumerable<string> DllDirectories
13         {
14             get { return _dllDirectories; }
15         }
16
17         public void AddSearchableDirectory(string directory)
18         {
19             if (Directory.Exists(directory))
20             {
21                 _dllDirectories.Add(directory);
22             }
23         }
24
25         public void RemoveSearchableDirectory(string directory)
26         {
27             _dllDirectories.Remove(directory);
28         }
29
30         protected override Assembly Load(AssemblyName assemblyName)
31         {
32             ALog.Debug($"Load!! : {assemblyName.Name}");
33             foreach (string dir in DllDirectories)
34             {
35                 FileInfo f = new FileInfo(Path.Combine(dir, $"{assemblyName.Name}.dll"));
36                 ALog.Debug(f.FullName);
37                 if (File.Exists(f.FullName))
38                 {
39                     return LoadFromAssemblyPath(f.FullName);
40                 }
41             }
42             return Assembly.Load(assemblyName);
43         }
44     }
45 }