Пользовательское членство провайдера с внедрением зависимостей - как проверить - PullRequest
0 голосов
/ 11 января 2012

Это похоже на Внедрение зависимостей с провайдером нестандартного членства , но ответы там не решают проблему для меня.

У меня есть пользовательский поставщик членства, который зависит от класса репозитория. ASP.NET всегда будет создавать это экземпляр с помощью конструктора без параметров, поэтому для разрешения зависимости от хранилища у меня есть своего рода метод поиска служб ... мой ctor выглядит так:

public CustomMembershipProvider()
{
    _userRepository = AppStart_NinjectMVC3.Resolve<IUserRepository>();
}

И этот метод Resolve выглядит следующим образом ..

public static T Resolve<T>() where T : class
{
    return _kernel.Get<T>();
}

Это прекрасно работает, когда я запускаю веб-приложение, потому что _kernel настроен правильно. Однако мне нужно протестировать методы на моем провайдере членства. Поэтому, когда мой тестовый код пытается вызвать методы на провайдере членства, он создает новый класс провайдера членства с ctor без параметров, что приводит к ошибкам, поскольку _kernel не настроен.

Что я хочу сделать, так это как-то внедрить мой класс FakeUserRepository, но как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 13 января 2012

Почему бы не извлечь всего из вашего пользовательского поставщика членства в класс реализации и создать экземпляр этого класса с помощью локатора служб, а затем передать все ваши вызовы этому?Затем класс реализации может быть модульно-тестируемым, а уродливые элементы Членства могут быть «правильными при проверке».

1 голос
/ 11 января 2012

Я думаю, у меня есть обходной путь для этого ...

Я добавил ctor к провайдеру членства, который принимает экземпляр репозитория, а затем я вручную создал своего провайдера членства в моем тестеКласс как это:

var prov = new CableSenseMembershipProvider(new FakeUserRepository());
        var config = new NameValueCollection();
        config.Add("applicationName", "ddd");
        config.Add("name", "CustomMembershipProvider");
        config.Add("requiresQuestionAndAnswer", "false");
        config.Add("requiresUniqueEmail", "false");
        prov.Initialize(config["name"], config);

Как только я этого не сделаю, я могу затем вызвать этот экземпляр и не беспокоиться о вызове ctor без параметров.добавить раздел членства в ваш тестовый проект app.config или он не будет работать - что несколько сбивает с толку!

...