2013-03-05 71 views
0

在我的代碼中,我有很多這樣的重複動作。 我想要寫1種的​​通用方法(與反射)來自動註冊存儲庫的過程爲這個與一個基類如何自動化Unity註冊?

 _container.RegisterType(typeof(IFinanceRepository<User, int>), typeof(UsersRepository), new TransientLifetimeManager(), new InjectionMember[] { }); 
     _container.RegisterType(typeof(IFinanceRepository<News, int>), typeof(NewsRepository), new TransientLifetimeManager(), new InjectionMember[] { }); 
     _container.RegisterType(typeof(IFinanceRepository<Currency, int>), typeof(CurrenciesRepository), new TransientLifetimeManager(), new InjectionMember[] { }); 
     _container.RegisterType(typeof(IFinanceRepository<Language, int>), typeof(LanguagesRepository), new TransientLifetimeManager(), new InjectionMember[] { }); 

而且

public class UsersRepository : EFFinanceRepository<User, int> 

所有對象(用戶,新聞等有對象基本接口 - IObject提取有筆 - 是ID屬性(GUID,INT,等)的類型

public class User : IObject<int> 
{ 
    /// <summary> 
    /// every object ID 
    /// </summary> 
    public int ID { get; set; } 

所有存儲庫具有基類

IOvolimeFinanceRepository<T, in IDType> 

其中T - IObject提取(用戶,新聞) IDType - ID屬性類型的每個對象我

幫助我,請generane完整抽象泛型方法來自動完成這個!

回答

0

您需要添加簡單的接口,讓庫主界面(IOvolimeFinanceRepository) - IGenericRepository

var types = Assembly.GetExecutingAssembly().GetTypes(); 

     var concreteRepositoryTypes = (from t in types 
             where !t.IsAbstract && typeof(IGenericRepository).IsAssignableFrom(t) 
             select t).ToList(); 

     foreach (var repositoryType in concreteRepositoryTypes) 
     { 
      //register like _container.RegisterType(typeof(UsersRepository), typeof(UsersRepository), new TransientLifetimeManager(), new InjectionMember[] { }); 
      _container.RegisterType(repositoryType, new TransientLifetimeManager(), new InjectionMember[] { }); 

      var interfaceForRepository = repositoryType.GetInterfaces().FirstOrDefault(x => x != typeof(IGenericRepository)); 

      if(interfaceForRepository != null) 
       _container.RegisterType(interfaceForRepository, repositoryType, new TransientLifetimeManager(), new InjectionMember[] { }); 
     } 
    }