AbpPlugInManager.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Linq;
  3. namespace Abp.PlugIns
  4. {
  5. public class AbpPlugInManager : IAbpPlugInManager
  6. {
  7. public PlugInSourceList PlugInSources { get; }
  8. private static readonly object SyncObj = new object();
  9. private static bool _isRegisteredToAssemblyResolve;
  10. public AbpPlugInManager()
  11. {
  12. PlugInSources = new PlugInSourceList();
  13. //TODO: Try to use AssemblyLoadContext.Default..?
  14. RegisterToAssemblyResolve(PlugInSources);
  15. }
  16. private static void RegisterToAssemblyResolve(PlugInSourceList plugInSources)
  17. {
  18. if (_isRegisteredToAssemblyResolve)
  19. {
  20. return;
  21. }
  22. lock (SyncObj)
  23. {
  24. if (_isRegisteredToAssemblyResolve)
  25. {
  26. return;
  27. }
  28. _isRegisteredToAssemblyResolve = true;
  29. AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
  30. {
  31. return plugInSources.GetAllAssemblies().FirstOrDefault(a => a.FullName == args.Name);
  32. };
  33. }
  34. }
  35. }
  36. }