有没有更好的方法来使用Structuremap将依赖项注入自定义RoleProvider?

时间:2012-03-16 13:36:40

标签: asp.net-mvc-3 structuremap roleprovider mvc-mini-profiler

我找到了http://www.devproconnections.com/content1/catpath/database-development/topic/a-perfect-storm-linq-to-sql-dependency-injection-and-asp-net-providers/page/2,其代码与网页类似:

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异常。为什么?

1 个答案:

答案 0 :(得分:2)

Microsoft“提供者”模式在依赖注入方面效果不佳,因为它依赖于静态和单例。如果您必须使用Provider,只需通过ObjectFactory.GetInstance执行服务定位并继续。