2010-12-10 3 views
2

Этот трассировки стека происходит в результате ошибки, которая гласит: «Имя поставщика не может быть нулевым или пустым .»Проблема с пользовательской роли поставщика

[ArgumentException:. Имя поставщика не может быть пустым или пустой] системы. Web.Security.Roles.Initialize() +2230205 System.Web.Security.RoleManagerModule.OnLeave (источник объекта, EventArgs eventArgs) +68 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, Boolean & завершен синхронно) +75

По существу я создаю свой собственный поставщик роли, который наследует класс SqlRoleProvider, я вызываю инициализацию успешно и подтвердил, что он успешно делает все в моем коде, но что-то в .Net явно не инициализируется, как «Роли», объект, который я не могу наследовать, вызывает у меня некоторые головные боли ...

любые идеи?

Ok мое решение наслаивается это означает, что мне нужно, чтобы обеспечить безопасность через бизнес-объектов тоже ... для того, чтобы сделать это, я определить следующее:

--- EDIT 1 ---

Мой код:

В основном блоке:

public class C20RoleProvider : RoleProvider 
{ 
    private C20SqlRoleDataProvider prov; 

    C20RoleProvider() 
    { 
     // this code is actually using some reflection based on config files 
     // i have simplified this to illustrate the problem im having ... 
     prov = new C20SqlRoleDataProvider(); 
    } 

    public override void Initialize(string name, NameValueCollection config) 
    { 
     prov.Initialize(name, config); 
    } 
} 

При сборке поставщика:

public class C20SqlRoleDataProvider : SqlRoleProvider 
{ 
     // code omitted 
} 

В этот момент я ожидаю, что смогу использовать все, что определяет базовый класс «RoleProvider», делая вызовы на prov. ...

Я пропустил дополнительный код, но в основном все методы, которые отмечены абстрактом от класса RoleProvider в классе «C20RoleProvider».

Я знаю, что это выглядит немного странно, но то, что я хочу сделать, - это отдельная бизнес-логика от сбора данных в провайдере, причем поставщик данных - это что-то (через мой код отражения), который может использовать класс бизнес-логики «C20RoleProvider» в бизнес-среде, не опасаясь что-либо сломать и разрешить замену исходных источников (например, данные о роли могут поступать из любого места).

Здесь многое происходит, но по существу весь слой среды приложения/бизнес-объекта использует поставщиков таким образом, чтобы «предоставлять» данные для основной бизнес-логики из любого источника.

+0

Где мой код? – willvv 2010-12-10 10:07:02

+0

Добавлено, извините wilvv :) ​​Есть намного больше, но я не хочу усложнять свой вопрос, добавляя материал, который не является проблемой. – War 2010-12-10 12:14:49

ответ

7

Хорошо я сделал некоторые рытье ... получается, что я не проезжал назад, что свойство «Name», который на самом деле не упоминается нигде ...

Исправление идет что-то вроде этого ...

public class C20RoleProvider : RoleProvider 
{ 
    private C20SqlRoleDataProvider prov; 

    public string Name 
    { 
     get {return prov.Name;} 
    } 

    C20RoleProvider() 
    { 
     // this code is actually using some reflection based on config files 
     // i have simplified this to illustrate the problem im having ... 
     prov = new C20SqlRoleDataProvider(); 
    } 

    public override void Initialize(string name, NameValueCollection config) 
    { 
     prov.Initialize(name, config); 
    } 
} 

Странно, что это, кажется, не известно нигде в сети.

Смежные вопросы