Existe-t-il un moyen d'auto-configurer Automapper pour analyser tous les profils dans l'espace de noms/l'assemblage? Ce que je voudrais faire est d'ajouter des profils de cartographie à AutoMapper de l'assemblage donné filtré par interface donnée, quelque chose comme les conventions d'analyse dans StructureMap:Comment numériser et configurer automatiquement des profils dans AutoMapper?
public static void Configure()
{
ObjectFactory.Initialize(x =>
{
// Scan Assembly
x.Scan(
scanner =>
{
scanner.TheCallingAssembly();
scanner.Convention<MyCustomConvention>();
scanner.WithDefaultConventions();
});
// Add Registries
x.AddRegistry(new SomeRegistry());
});
Debug.WriteLine(ObjectFactory.WhatDoIHave());
}
public class MyCustomConvention : IRegistrationConvention
{
public void Process(Type type, Registry registry)
{
if (!type.CanBeCastTo(typeof(IMyType)))
{
return;
}
string name = type.Name.Replace("SomeRubishName", String.Empty);
registry.AddType(typeof(IMyType), type, name);
}
J'ai essayé d'utiliser SelfConfigure mais ne trouve aucune documentation sur comment l'utiliser pour filtrer les profils:
public static void Configure()
{
Mapper.Initialize(x =>
{
// My Custom profile
x.AddProfile<MyMappingProfile>();
// Scan Assembly
x.SelfConfigure(Assembly.GetCallingAssembly());
});
}
Une autre question est de savoir comment puis-je signaler toutes les cartes/profils déjà initialisés (quelque chose comme ObjectFactory.WhatDoIHave() dans StructureMap)?
Cela semble être mutuellement exclusif avec la méthode 'ConstructServicesUsing'. Luttant avec dépassement des dépendances atm. –
Oui, je ne passe pas de dépendances dans mes cartes. Vous pouvez toujours les enregistrer dans un conteneur IoC et le faire résoudre les dépendances pour vous. Nous aurions fait cela mais il n'y en avait pas besoin. –
Arnis L - il suffit de modifier configuration.AddProfile (Activator.CreateInstance (profil) en tant que profil); à configuration.AddProfile (ServiceLocator.Current.GetInstance (profile) en tant que Profile); (ou similaire, évidemment, cela dépend du conteneur IoC que vous utilisez) pour permettre l'injection de dépendances. Très bonne réponse. –