Невозможно вызвать методы из настраиваемого RoleProvider

Я создал собственный RoleProvider для C # .NET 4.0. Я реализовал все необходимые методы, а также добавил несколько собственных. Я изменил Web.config, чтобы использовать свой собственный RoleProvider, но я не могу вызвать ни один из моих пользовательских методов. Например, я добавил в свой собственный RoleProvider следующий метод:

public void Myfunc(string user)
{
  var a = user;
}

Однако, когда я пытаюсь вызвать метод с помощью этого фрагмента:

Roles.MyFunc("testuser");

Я не получаю intellisense для функции Myfunc, и VS выдает ошибку «Неизвестный метод Myfunc для System.Web.Security.RoleProvider. Я могу сказать, что мой пользовательский RoleProvider загружается, потому что я могу установить точки останова в одном из требуемых / переопределенные методы, и он попадает в настраиваемый RoleProvider. Но как я могу вызвать свои настраиваемые функции RoleProvider?


person solidau    schedule 20.09.2012    source источник


Ответы (2)


MyFunc не является членом RoleProvider.

Вы пытаетесь создать метод расширения?
Тогда ваш метод должен выглядеть так:

public static void Myfunc(this System.Web.Security.RoleProvider roleProvider, string user)
{
  var a = user;
}

Если Roles - ваш собственный класс и вы реализовали MyFunc, вам нужно показать нам больше кода. Но, судя по всему, Roles является экземпляром RoleProvider или, если это сам ваш класс, вам нужно сделать MyFunc метод статическим или создать экземпляр Roles.

person Sani Singh Huttunen    schedule 20.09.2012
comment
Я столкнулся с аналогичной проблемой с MembershipProvider и реализованными методами расширения, чтобы иметь возможность вызывать мои функции через Membership.Provider.MyExtensionMethod(). Чтобы сделать то же самое с RoleProvider, вы бы назвали расширения так Roles.Provider.MyExtensionMethod() - person JG in SD; 21.09.2012
comment
Это работает, но я думаю, что я слишком упростил проблему ... Я не уверен, что такое роли. Но в документации по .NET framework я видел, как они звонили поставщику. Поставщик создается .NET из значений в web.config, поэтому я никогда не создавал его явно, это делается фреймворком. - person solidau; 21.09.2012
comment
Roles - это статический класс во фреймворке. System.Web.Security.Roles.i у меня такая же проблема. как мне расширить класс RoleProvider и добавить свои собственные методы? - person superartsy; 22.05.2013

Похоже, ваш поставщик пользовательских ролей настроен правильно. Оттуда все, что вам нужно сделать, это привести System.Web.Security.Roles.Provider к вашему настраиваемому классу и вызвать настраиваемый метод.

Это выглядело бы примерно так:

((MyProject.Helpers.CustomRoleProvider) System.Web.Security.Roles.Provider) .MyFunc ("testuser");

person GnomeCubed    schedule 19.09.2013