.NET Core 1.0, Enumerazione Tutte le classi che implementano la class base

Sto lavorando alla migrazione di un progetto ASP.NET in RC2. Sto usando AutoFac per cercare di enumerare le classi che implementano la class base Profilo AutoMapper per impostare tutti i miei profili di mapping senza doverli chiamare esplicitamente. Precedentemente nella versione precedente di ASP.NET (anche in RC1) ero in grado di usare il seguente codice:

public class AutoMapperModule : Module { protected override void Load(ContainerBuilder builder) { builder.RegisterAssemblyTypes().AssignableTo(typeof(Profile)).As(); builder.Register(context => { var profiles = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(IoC.GetLoadableTypes) .Where(t => t != typeof(Profile) && t.Name != "NamedProfile" && typeof(Profile).IsAssignableFrom(t)); var config = new MapperConfiguration(cfg => { foreach (var profile in profiles) { cfg.AddProfile((Profile)Activator.CreateInstance(profile)); } }); return config; }) .AsSelf() .As() .SingleInstance(); builder.Register(c => c.Resolve().CreateMapper(c.Resolve)).As().InstancePerLifetimeScope(); builder.RegisterType().As(); } } 

Questo ha funzionato in modo fantastico, fino a quando ho provato a convertire il mio progetto in RC2 utilizzando il nuovo framework netcoreapp1.0, ma ora sto ricevendo un errore di progettazione su AppDomain che afferma che “AppDomain non esiste nel contesto corrente”. Ho visto alcuni suggerimenti sull’utilizzo di ILibraryManager o DependencyContext per farlo, ma non riesco a capire come farlo funzionare. Eventuali suggerimenti?

.Net Core attualmente (1.0 RTM) non supporta AppDomain.GetAssemblies() o un’API simile. È probabile che lo supporti in 1.1.

Fino a quel momento, se hai bisogno di questa funzionalità, dovrai utilizzare net452 (ad esempio .Net Framework) anziché netcoreapp1.0 .

Funzionerà?

 var all = Assembly .GetEntryAssembly() .GetReferencedAssemblies() .Select(Assembly.Load) .SelectMany(x => x.DefinedTypes) .Where(type => typeof(ICloudProvider).IsAssignableFrom(type.AsType())); foreach (var ti in all) { var t = ti.AsType(); if (!t.Equals(typeof(ICloudProvider))) { // do work } }