public void Test1Impl() { #if NETCOREAPP Console.WriteLine(typeof(IServiceTypeProvider)); FieldInfo writeCoreHook = typeof(Debug).GetField("s_WriteCore", BindingFlags.Static | BindingFlags.NonPublic); writeCoreHook.SetValue(null, new Action <string>((s) => Console.WriteLine(s))); #else Debug.Listeners.Add(new ConsoleTraceListener()); #endif // First use our test logger to verify the output //var originalWriteCoreHook = writeCoreHook.GetValue(null); //writeCoreHook.SetValue(null, new Action<string>(WriteLogger.s_instance.WriteCore)); //Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); //netcore3.0 SetProvider(DebugProvider provider) var assemblies = new AssemblyLoaderBuilder() .UseLoadedAssemblies() .Directories(System.IO.Path.GetDirectoryName( typeof(Tests).Assembly.Location)) .Load(); #if !FODY ILMerge.AutoResolveMergedAssemblies.AutoResolverInstaller.EnsureInstalled(); #endif assemblies = assemblies .Where(z => !z.GetName() .Name.StartsWith("nunit", StringComparison.OrdinalIgnoreCase)) .ToArray(); var provider = new PluginServiceTypeProvider(assemblies); var types = provider.GetServiceTypes <BaseClass>().ToArray(); Console.WriteLine(); Console.WriteLine(string.Join("\r\n", types.Select(z => z.FullName))); Assert.AreEqual(1, types.Length); Assert.AreEqual("DerivedClass", types[0].Name); }
static void Main(string[] args) { #if FODY #if !NETCOREAPP CosturaUtility.Initialize(); #endif #else AutoResolverInstaller.EnsureInstalled(); #endif var assemblies = new AssemblyLoaderBuilder() .UseLoadedAssemblies() .Directories(AppDomain.CurrentDomain.BaseDirectory) .Load(); foreach (var a in assemblies) { Console.WriteLine(a.FullName); } var serviceProvider = new PluginServiceTypeProvider(assemblies); Console.WriteLine("bs :{0}", typeof(BaseClass).FullName); AppDomain.CurrentDomain.FirstChanceException += (a, b) => { Console.WriteLine(b.Exception); if (b.Exception is System.Reflection.ReflectionTypeLoadException rte) { foreach (var ex in rte.LoaderExceptions) { Console.WriteLine(ex); } } }; var types = serviceProvider.GetServiceTypes <BaseClass>().ToArray(); Console.WriteLine(Activator.CreateInstance(types[0])); }