У меня есть приложение asp.net mvc. Я создал пользовательский провайдер членства
это связано в web.config, как это:
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear/>
<add name="MyMembershipProvider" type="MyProject.Infrastructure.Security.MyMembershipProvider" />
</providers>
</membership>
Я использую Castle Windsor для IoC. Обычно я использую конструктор инъекций что-то вроде:
SomeController(ISomething something)
{
something.do();
...
}
Я не могу использовать это для пользовательского класса членства, потому что я получаю сообщение об ошибке из web.config, что у меня нет конструктора без параметров. Но если бы я использовал конструктор без параметров, объект не был бы инициализирован.
Итак, я использовал инъекцию свойства так:
<castle>
<components>
<component id="usersRepos" service="MyProject.Core.Repositories.IUserRepository, MyProject.Core" type="MyProject.Data.RepositoryImplementations, MyProject.Data"></component>
</components>
</castle>
...
public class MyMembershipProvider : MembershipProvider
{
public IUserRepository UserRepository{get; set;}
public override bool ValidateUser(string username, string password)
{
if (UserRepository.UserExists(username, password))
{
return true;
}
return false;
}
}
И я получаю исключение ссылки на объект, потому что объект (UserRepository) не был инициализирован.