@@ -11,57 +11,37 @@ namespace Flow.Launcher.Core.Plugin
1111{
1212 internal class PluginAssemblyLoader : AssemblyLoadContext
1313 {
14- private readonly AssemblyDependencyResolver dependencyResolver ;
14+ private readonly AssemblyDependencyResolver _dependencyResolver ;
1515
16- private readonly AssemblyName assemblyName ;
17-
18- private static readonly ConcurrentDictionary < string , byte > loadedAssembly ;
19-
20- static PluginAssemblyLoader ( )
21- {
22- var currentAssemblies = AppDomain . CurrentDomain . GetAssemblies ( ) ;
23- loadedAssembly = new ConcurrentDictionary < string , byte > (
24- currentAssemblies . Select ( x => new KeyValuePair < string , byte > ( x . FullName , default ) ) ) ;
25-
26- AppDomain . CurrentDomain . AssemblyLoad += ( sender , args ) =>
27- {
28- loadedAssembly [ args . LoadedAssembly . FullName ] = default ;
29- } ;
30- }
16+ private readonly AssemblyName _assemblyName ;
3117
3218 internal PluginAssemblyLoader ( string assemblyFilePath )
3319 {
34- dependencyResolver = new AssemblyDependencyResolver ( assemblyFilePath ) ;
35- assemblyName = new AssemblyName ( Path . GetFileNameWithoutExtension ( assemblyFilePath ) ) ;
20+ _dependencyResolver = new AssemblyDependencyResolver ( assemblyFilePath ) ;
21+ _assemblyName = new AssemblyName ( Path . GetFileNameWithoutExtension ( assemblyFilePath ) ) ;
3622 }
3723
3824 internal Assembly LoadAssemblyAndDependencies ( )
3925 {
40- return LoadFromAssemblyName ( assemblyName ) ;
26+ return LoadFromAssemblyName ( _assemblyName ) ;
4127 }
4228
4329 protected override Assembly Load ( AssemblyName assemblyName )
4430 {
45- string assemblyPath = dependencyResolver . ResolveAssemblyToPath ( assemblyName ) ;
31+ string assemblyPath = _dependencyResolver . ResolveAssemblyToPath ( assemblyName ) ;
4632
4733 // When resolving dependencies, ignore assembly depenedencies that already exits with Flow.Launcher
4834 // Otherwise duplicate assembly will be loaded and some weird behavior will occur, such as WinRT.Runtime.dll
4935 // will fail due to loading multiple versions in process, each with their own static instance of registration state
50- if ( assemblyPath == null || ExistsInReferencedPackage ( assemblyName ) )
51- return null ;
36+ var existAssembly = Default . Assemblies . FirstOrDefault ( x => x . FullName == assemblyName . FullName ) ;
5237
53- return LoadFromAssemblyPath ( assemblyPath ) ;
38+ return existAssembly ?? ( assemblyPath == null ? null : LoadFromAssemblyPath ( assemblyPath ) ) ;
5439 }
5540
5641 internal Type FromAssemblyGetTypeOfInterface ( Assembly assembly , Type type )
5742 {
5843 var allTypes = assembly . ExportedTypes ;
5944 return allTypes . First ( o => o . IsClass && ! o . IsAbstract && o . GetInterfaces ( ) . Any ( t => t == type ) ) ;
6045 }
61-
62- internal bool ExistsInReferencedPackage ( AssemblyName assemblyName )
63- {
64- return loadedAssembly . ContainsKey ( assemblyName . FullName ) ;
65- }
6646 }
6747}
0 commit comments