在我的代码中,我有很多这样的重复动作。 我想写一个通用方法(带反射)来自动化这个具有一个基类的对象的注册存储库过程
_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>
所有对象(用户,新闻,e.t.c。都有基本接口 - IObject有T - 是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 - 每个对象i
的ID属性的类型请帮助我,请使用全新的抽象通用方法自动执行此操作!
答案 0 :(得分:1)
您可能希望使用添加基于约定的注册的Unity扩展。那里有几个。我没有使用它们中的任何一个,但是我已经使用了与温莎城堡的会议注册,我非常喜欢它。
答案 1 :(得分: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[] { });
}
}
答案 2 :(得分:0)
Unity已经按照惯例注册。
您没有提到您要定位的版本。我很确定这可以从Unity 3.0开始使用
http://msdn.microsoft.com/en-us/library/dn507479%28v=pandp.30%29.aspx