public class CustomProvider : MembershipProvider, IMembershipProvider
{
private IUserRepository _userRepo;
// this .ctor is used via unit tests (as a seam)
public CustomProvider(IUserRepository repo)
{
this._userRepo = repo;
}
// requisite parameter-less constructor:
public CustomProvider()
{
// do NOTHING here
}
public override bool ValidateUser(string username, string password)
{
// HACK:
IUserRepository repo = this._userRepo ?? ObjectFactory.GetInstance<IUserRepository>();
SiteUser user = repo.GetUserByEmailAddress(username.ToLower());
if (user == null)
return false;
if (!user.Active || !user.Verified)
return false;
if (user.PassPhrase.IsNullOrEmpty())
return false;
// do other verification... etc
}
}
除了我的是自定义RoleProvider。调用ObjectFactory.GetInstance是一种将依赖项注入RoleProvider的可接受方式吗?我试图设置一个属性来注入依赖项,但我无法让它工作。我确定我的StructureMap注册表是错误的。但是当文档过时时很难找到正确的方法。
那么对于ASP.NET MVC3应用程序,是否在自定义RoleProvider中调用ObjectFactory?或者我应该尝试注入房产吗?
如果属性,怎么样?我目前有For<RoleProvider>().Use(ctx => Roles.Provider);
。但是我不确定使用应该是一个Add,也不确定在语法上为属性注入一个依赖。
仍然需要帮助 当我只是将StructureMap ObjectFactory移动到init的属性时,我正在努力使miniprofiler不抛出Null ref异常。目标是允许缓存角色。我收到与这些问题相同的错误mini-profiler nullreferenceexception Help Configure mvc mini profiler with Linq to Sql
我已经更新到最新的MVCMiniProfiler并尝试了它的MVC包。似乎在自定义RoleProvider为init或初始化属性之前未启用性能分析。如果我直接从重写的GetRolesForUser方法设置字段,一切都很好。如果我将该字段作为公共属性的支持者,我在ProfiledDbCommand中得到NULL异常。为什么?
答案 0 :(得分:2)
Microsoft“提供者”模式在依赖注入方面效果不佳,因为它依赖于静态和单例。如果您必须使用Provider,只需通过ObjectFactory.GetInstance执行服务定位并继续。