我有一个名为User
的类,它的属性为List <Role>
。
使用依赖注入如何在我需要首先了解用户的情况下填充角色?即角色依赖于用户,因此我无法在实例化时将它们注入,因为此时我不知道用户,因为我需要首先调用返回用户对象的GetUser (username);
方法。
这是我的课程结构
public partial class User:IUser
{
private List<IUserRole> _userRoles = new List<IUserRole>();
public User()
{
}
public User GetUserByID(int id, dbEntities context)
{
User user = new User();
using(context)
{
user = (from u in context.Users where u.ID == id select u).FirstOrDefault();
}
return user;
}
public User GetUser(string username, string password, dbEntities context)
{
User user = new User();
using (context)
{
user = (from u in context.Users where u.Username==username && u.Password==password select u).FirstOrDefault();
}
return user;
}
List<IUserRole> UserRoles
{
get
{
return _userRoles;
}
set
{
_userRoles = value;
}
}
}
如您所见,通过各种方法检索填充的用户对象。但是我真的希望UserRoles也可以与对象一起返回,但注入角色将无法工作,因为在填充用户之前无法检索它们。
答案 0 :(得分:1)
直接访问List<Roles>
强制您在创建User
时填充列表。这意味着你的工厂&#34;对于User
对象,还需要调用&#34;角色提供者&#34;获取用户的角色列表。
假设你正在使用像Unity这样的DI容器代码类似于:
_container.RegisterFactory(container =>
{
var user = new User();
user.Roles = container.Resolve<IRolesProvider>()
.GetRolesForUser(user);
return user;
});
或者,您可以将依赖项添加到&#34;角色提供程序&#34;到User
并根据需要计算(可能使用缓存):
class User
{
IRolesProvider roles;
public User(IRolesProvider roles,....)
{
this.roles = roles;
...
}
public List<Roles> { get { return roles.GetRolesForUser(this);}}
...
}