我的主要模型类是"RoleMaster"one_answers"UserMaster"
public class RoleMaster
{
public int RoleId { get; set; }
public string RoleName { get; set; }
}
public class UserMaster
{
public int UserId { get; set; }
public string UserName { get; set; }
}
这是我的主存储库接口
public interface IRepository<in T> where T : class
{
bool Add(T entity);
}
RoleMaster 的已实现类
public class RoleRepository : IRepository<RoleMaster>
{
public bool Add(RoleMaster entity)
{
//Add Logic
}
}
UserMaster 的已实现类
public class UserRepository : IRepository<UserMaster>
{
public bool Add(UserMaster entity)
{
//Add Logic
}
}
现在我想实现
container.RegisterType<(IRepository<T>)(new InjectionFactory(m =>
{
if (typeof(T) is RoleMaster)
{
m.Resolve<RoleRepository>();
}
else if (typeof(T) is UserMaster)
{
m.Resolve<UserRepository>();
}
return m;
}));
使用Unity有可能吗?
做这种有条件的Resolve的最佳方法是什么?
您只需要用unity 显式注册它们
container.RegisterType<IRepository<RoleMaster>, RoleRepository>();
container.RegisterType<IRepository<UserMaster>, UserRepository>();
我建议您使用通用存储库模式,或者为每个存储库创建一个新的接口。或者两者的结合,但这可能会让人感到困惑。
对于泛型存储库(有很多例子),您只需要对容器进行一次调用来注册打开的泛型类型,因为IRepsitory<T>
接口只有一个实现。。。
container.RegisterType(typeof(IRepository<>), typeof(GenericRepository<>));
但是,如果您计划在每个存储库中添加自定义方法,则可能需要在该实体类型的自定义存储库接口上定义这些方法。然后最好在自定义存储库接口上进行注册,而不是在通用接口上。。。
container.RegisterType<IRepositoryRole, RoleRepository>();
public interface IRepositoryRole : IRepository<RoleMaster>
{
public void DoCustomRoleWork(...) { ... }
}