Czy istnieje sposób automatycznej konfiguracji programu Automapper do skanowania wszystkich profili w przestrzeni nazw/złożeniu? Co chciałbym zrobić, to dodać profile mapowania do AutoMapper z danego zespołu przefiltrowanej przez dany interfejs, coś jak konwencje skanowania w StructureMap:Jak skanować i automatycznie konfigurować profile w 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);
}
Próbowałem użyć SelfConfigure ale nie może znaleźć żadnej dokumentacji na jak go używać, aby odfiltrować profili:
public static void Configure()
{
Mapper.Initialize(x =>
{
// My Custom profile
x.AddProfile<MyMappingProfile>();
// Scan Assembly
x.SelfConfigure(Assembly.GetCallingAssembly());
});
}
Inną kwestią jest to w jaki sposób mogę zgłosić wszystkie mapy/profile już zainicjowany (coś jak ObjectFactory.WhatDoIHave() w StructureMap)?
Wydaje się, że wyklucza się to wzajemnie za pomocą metody "ConstructServicesUsing". Zmaganie z przekazywaniem zależności atm. –
Tak, nie przekazuję żadnych zależności na moich mapach. Zawsze możesz zarejestrować je w kontenerze IoC i sprawić, że rozwiąże ono dla ciebie zależności. Zrobilibyśmy to, ale nie było takiej potrzeby. –
Arnis L - wystarczy zmienić configuration.AddProfile (Activator.CreateInstance (profile) jako Profile); do configuration.AddProfile (ServiceLocator.Current.GetInstance (profile) jako Profile); (lub podobnie, oczywiście może to zależeć od tego, którego kontenera IoC używasz), aby umożliwić wstrzyknięcie zależności. Świetna odpowiedź. –