Есть ли лучший способ использовать Structuremap для внедрения зависимостей в пользовательский RoleProvider? - PullRequest
0 голосов
/ 16 марта 2012

Я нашел 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 нормально ли вызывается ObjectFactory в пользовательском RoleProvider? Или я должен попытаться ввести свойство?

Если собственность, то как? У меня есть For<RoleProvider>().Use(ctx => Roles.Provider); в настоящее время. Но я не уверен, что значение Use должно быть Add, и я не уверен в синтаксисе для добавления зависимости в свойство.

Все еще нужна помощь Я ужасно пытаюсь заставить miniprofiler не выдавать исключения Null ref, когда я просто перемещаю ObjectFactory StructureMap в свойство для init. Цель состоит в том, чтобы разрешить кэширование ролей. Я получаю ту же ошибку, что и эти вопросы мини-профилировщик nullreferenceexception Помогите настроить мини-профилировщик mvc с Linq для Sql

Я обновился до последней версии MVCMiniProfiler и попробовал его пакет MVC. Кажется, что профилирование не включено до инициализации пользовательского RoleProvider или инициализации свойств. Если я устанавливаю поле прямо из переопределенного метода GetRolesForUser, все в порядке. Если я сделаю это поле сторонником открытого свойства, я получу NULL-исключения в ProfiledDbCommand. Зачем?

1 Ответ

2 голосов
/ 18 марта 2012

Шаблон Microsoft «провайдер» плохо работает с внедрением зависимостей из-за его зависимости от статики и синглетонов.Если вам нужно использовать провайдера, просто определите местоположение службы через ObjectFactory.GetInstance и двигайтесь дальше.

...