2016-05-19 9 views
0

Ich versuche, das Äquivalent des folgenden Autofac-Codes in Unity IoC zu machen.Unity Batch-Register nach Konvention

builder.RegisterAssemblyTypes(typeof (DataRepository<>).Assembly) 
      .Where(t => t.Name.EndsWith("Repository")) 
      .AsImplementedInterfaces(); 

Diese grundsätzlich einzeln ersetzt Registrierung folgende:

DataSourceDataRepository : DataRepository<DataSource>, IDataSourceDataRepository 

Aus Gründen der Klarheit: Diese all meine Repository-Typen als ihre implementierten Schnittstellen registriert, so dass, wenn ich IDataSourceDataRepository injizieren bekomme ich ein DataSourceDataRepository usw.

In Einheit war ich nicht in der Lage, manuell einzeln nacheinander zu gehen. Testcode zeigt nur einen Fehler bei der Registrierung an.

Mein Versuch:

container.RegisterType<RepositoryConnection>(new HierarchicalLifetimeManager()); 

container.RegisterTypes(
    AllClasses.FromLoadedAssemblies().Where(t => typeof(IRepository).IsAssignableFrom(t)), getLifetimeManager: t => new TransientLifetimeManager(), 
    getInjectionMembers: t=> new InjectionConstructor[] {new InjectionConstructor(typeof(RepositoryConnection)) }); 

Antwort

0

Dies sollte funktionieren:

container.RegisterTypes(
    AllClasses.FromAssemblies(typeof(DataRepository<>).Assembly) 
     .Where(t => t.Name.EndsWith("Repository")), 
    WithMappings.FromAllInterfaces);