public static void Initialize(params Assembly[] AdditionalAssemblies) { if (IsInitialized) { return; } List <Assembly> TargetAssemblies = AdditionalAssemblies.ToList(); TargetAssemblies.Add(typeof(Message).GetTypeInfo().Assembly); TypeInfo[] MessageTypes = TargetAssemblies.SelectMany(x => x.ExportedTypes).Select(x => x.GetTypeInfo()).Where(x => x.IsSubclassOf(typeof(Message))).ToArray(); Dictionary <Type, int> SubTypeCount = new Dictionary <Type, int>(); for (int i = 0; i < MessageTypes.Length; i++) { MetaType ProtobufType; if (!SubTypeCount.ContainsKey(MessageTypes[i].BaseType)) { ProtobufType = RuntimeTypeModel.Default.Add(MessageTypes[i].BaseType, true); SubTypeCount[MessageTypes[i].BaseType] = 101; } else { ProtobufType = RuntimeTypeModel.Default[MessageTypes[i].BaseType]; } ProtobufType.AddSubType(SubTypeCount[MessageTypes[i].BaseType], MessageTypes[i].AsType()); SubTypeCount[MessageTypes[i].BaseType]++; } IsInitialized = true; }
/// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private async Task PerformModuleLoadAsync(string moduleName) { var assemblyName = new AssemblyName { Name = moduleName, Version = null, }; var lazyPageAssembly = _assemblyLoader.GetLoadedAssemblyByName(assemblyName); if (lazyPageAssembly == null) { Render(Loading(moduleName)); // show loading RenderFragment lazyPageAssembly = await _assemblyLoader .LoadAssemblyByNameAsync(new AssemblyName { Name = moduleName, Version = null, }) .ConfigureAwait(true); // continue in render thread } if (lazyPageAssembly == null) { throw new InvalidOperationException("Page cannot load if assembly failed to load"); } AdditionalAssemblies = AdditionalAssemblies == null ? new[] { lazyPageAssembly } : AdditionalAssemblies.Concat(new[] { lazyPageAssembly }); await RefreshLazyRouteTableAsync(); }
protected void AddAssembly(AdditionalAssembly assembly) { if (assembly is null) { throw new ArgumentNullException(nameof(assembly)); } if (AdditionalAssemblies == null) { AdditionalAssemblies = new HashSet <AdditionalAssembly>(); } AdditionalAssemblies.Add(assembly); }