2012-03-14 20 views
17

con Unity, me gustaría registrar automáticamente todas las combinaciones de interfaz/clase en una asamblea sobre la base de la siguiente convención:registre automáticamente todas las interfaces con Unity

INameOfObject > NameOfObject 

StructureMap hace que cuando las convenciones están habilitadas por defecto .

me escribió el siguiente método para ello:

private static IUnityContainer RegisterITypesOf(this IUnityContainer container, string assemblyName) 
{ 
    Assembly.Load(assemblyName) 
    .GetTypes() 
    .Where(t => t.GetInterfaces().Any(i => i.Name == "I" + t.Name)) 
    .ForEach(t => container.RegisterType(t.GetInterface("I" + t.Name, false), t)); 
    return container; 
} 

Mi pregunta es:

  • hay una función incorporada que hace lo mismo?
  • si no, ¿se puede mejorar mi código de rendimiento?

Respuesta

2

Yo quería lo mismo que usted; configuración basada en convenciones a Structuremap, y siguió adelante y creó una biblioteca para ello. Puede descargarlo en NuGet, y leer alguna documentación en mi github page

Espero que esto ayude!

+0

Niza lib! Casi lo hace de la misma manera, así que voy a suponer que es la mejor manera de hacerlo :) – David

12

Unity 3.5.140.0 tiene una funcionalidad incorporada para registrar interfaces con nombres similares a la clase que lo utiliza.

public static void RegisterTypes(IUnityContainer container) 
{ 
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(), 
    WithMappings.FromMatchingInterface, 
    WithName.Default); 
} 
+0

Alguna explicación sería una buena idea ... – PiotrWolkowski

+1

Genial, es bueno saberlo. Blogpost con explicación: http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx – David

+0

Por lo tanto, debe incluir el espacio de nombres 'Unity.RegistrationByConvention'. – royalTS

Cuestiones relacionadas