Замок Виндзор не привносит зависимость в свойства - PullRequest
2 голосов
/ 20 августа 2009

У меня есть приложение 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) не был инициализирован.

1 Ответ

2 голосов
/ 20 августа 2009

Виндзор не может управлять провайдерами членства (или, по крайней мере, кажется, что никто не удосужился узнать, как это сделать), поэтому им никогда ничего не вводят. См. this для обхода.

ОБНОВЛЕНИЕ: Я написал о лучшем, бесшовном, обходном пути

...