Castle Windsor не привносит зависимости в свойства

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


person Omu    schedule 20.08.2009    source источник
comment
Правильно ли зарегистрирован ваш класс? если вы попытаетесь разрешить IUserRepository, удастся ли это?   -  person Krzysztof Kozmic    schedule 20.08.2009


Ответы (1)


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

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

person Mauricio Scheffer    schedule 20.08.2009