【问题标题】:castle windsor doesn't inject dependency into properties温莎城堡不会将依赖项注入属性
【发布时间】:2009-08-20 11:30:03
【问题描述】:

我有 asp.net mvc 应用程序。我创建了一个自定义会员提供程序 像这样绑定在 web.config 中:

<membership defaultProvider="MyMembershipProvider">
    <providers>
        <clear/>
        <add name="MyMembershipProvider" type="MyProject.Infrastructure.Security.MyMembershipProvider" /> 
    </providers>
</membership>

我将温莎城堡用于 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)尚未初始化,我得到对象引用未找到异常。

【问题讨论】:

  • 您的班级注册正确吗?如果您尝试解析 IUserRepository 会成功吗?

标签: asp.net-mvc asp.net-membership castle-windsor


【解决方案1】:

会员资格提供者无法由 Windsor 管理(或者至少似乎没有人费心去了解如何去做),因此他们永远不会得到任何注入。有关解决方法,请参阅 this

更新:I wrote about a better, seamless, workaround

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多