Эта трассировка стека возникает в результате ошибки, которая гласит: «Имя поставщика не может быть пустым или пустым.»
[ArgumentException: Имя поставщика не может быть пустым или пустым.] System.Web.Security.Roles.Initialize () +2230205 System.Web.Security.RoleManagerModule.OnLeave (Источник объекта, EventArgs eventArgs) +68 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +148p.(IExecutionStep step, Boolean & completeSynchronously) + 75
По сути, я создаю свой собственный пользовательский поставщик ролей, который наследует класс SqlRoleProvider, я успешно вызываю инициализацию и подтвердил, что он успешно выполняет все в моем коде, но что-то в.Net явно не инициализируется правильно, поскольку объект «Роли», который я не могу унаследовать, вызывает у меня некоторые головные боли ...
есть идеи?
Хорошо, мое решение является многоуровневым, что означаетМне нужно обеспечить безопасность через уровень бизнес-объектов тоже ... для того, чтобыдля этого я определяю следующее:
--- 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);
}
}
Inсборка провайдера:
public class C20SqlRoleDataProvider : SqlRoleProvider
{
// code omitted
}
На данный момент я ожидал бы, что смогу использовать все, что определяет базовый класс "RoleProvider", делая вызовы на prov....
Я пропустил дополнительный код, но в основном есть все методы, помеченные как абстрактные из класса RoleProvider в классе "C20RoleProvider".
Я знаю, что это выглядит немного странноно то, что я хочу сделать, это отделить бизнес-логику от сбора данных в провайдере, причем провайдер данных является чем-то (через мой код отражения), класс бизнес-логики «C20RoleProvider» можно использовать в бизнес-среде, не опасаясь что-либо сломать, идля замены внутренних источников (например, данные ролей могут поступать откуда угодно).
Здесь происходит гораздо больше, но, по сути, весь уровень инфраструктуры приложений / бизнес-объектов использует поставщиков таким образом, чтобы «предоставлять» данные ядру.бизнес логика из любого источника.