public void RegisterFrom(CollectibleAssemblyLoadContext assemblyLoadContext) { var assembly = assemblyLoadContext.GetEntryPointAssembly(); IEnumerable<Type> providers = assembly.GetExportedTypes().Where(p => p.GetInterfaces().Any(x => x.Name == "INotificationProvider")); if (providers.Any()) { foreach (Type p in providers) { INotificationProvider obj = (INotificationProvider)assembly.CreateInstance(p.FullName); Dictionary<string, List<INotificationHandler>> result = obj.GetNotifications(); foreach (KeyValuePair<string, List<INotificationHandler>> item in result) { foreach (INotificationHandler i in item.Value) { Subscribe(item.Key, i); } } } } }
public void AddFromLoadContext(CollectibleAssemblyLoadContext assemblyLoadContext) { var assembly = assemblyLoadContext.GetEntryPointAssembly(); var pluginContext = assembly.GetExportedTypes().SingleOrDefault(p => p.GetInterfaces().Any(x => x.Name == nameof(IPluginContext))); if (pluginContext != null) { IPluginContext obj = (IPluginContext)assembly.CreateInstance(pluginContext.FullName); Add(assemblyLoadContext.PluginName, obj); } }
public void UnRegisterFrom(CollectibleAssemblyLoadContext assemblyLoadContext) { var assembly = assemblyLoadContext.GetEntryPointAssembly(); foreach(var kp in _containers) kp.Value.RemoveAll(handler => handler.GetType().Assembly.GetName() == assembly.GetName()); }