2009-08-20 11 views
2

私はasp.net mvcアプリケーションを持っています。私はIoCのための城ウィンザーを使用城ウィンザーはプロパティに依存性を注入しません

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

:私はこのようなweb.configファイルにバインドされているカスタムメンバシッププロバイダ を作成しました。私はパラメータなしのコンストラクタを持たないweb.configファイルからのエラーを取得するので、私はカスタムメンバーシップクラスのためにこれを使用することはできません

SomeController(ISomething something) 
{ 
    something.do(); 
    ... 
} 

:通常私のようなコンストラクタ・インジェクションのものを使用します。しかし、パラメータのないコンストラクタを使用した場合、オブジェクトは初期化されません。

だから私はそうのようなプロパティインジェクションを使用:...

<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)が初期化されていないので、私は、オブジェクト参照の例外が見つかりませんます。

+0

クラスは正しく登録されていますか? IUserRepositoryを解決しようとすると成功するでしょうか? –

答えて

2

メンバーシップ・プロバイダーはウィンザーによって管理することはできません(または、少なくとも、どのようにそれを行うのか気にしない人はいないようです)。回避策は、thisを参照してください。

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