2011-01-10 20 views
7

次のように私のIoCと私はロールプロバイダを書いたように、私はninject使用しています:Ninject with MembershipProvider | RoleProvider

public class BasicRoleProvider : RoleProvider 
{ 
    private IAuthenticationService authenticationService; 

    public BasicRoleProvider(IAuthenticationService authenticationService) 
    { 
     if (authenticationService == null) throw new ArgumentNullException("authenticationService"); 
     this.authenticationService = authenticationService; 
    } 

    /* Other methods here */ 
} 

私はninjectのインスタンスを注入するために取得する前にProviderクラスはインスタンス化を受けることをお読みください。これをどうやって回りますか?この回答hereから

Bind<RoleProvider>().To<BasicRoleProvider>().InRequestScope(); 

:私は現在、このninjectコードを持っています。

If you mark your dependencies with [Inject] for your properties in your provider class, you can call kernel.Inject(MemberShip.Provider) - this will assign all dependencies to your properties.

私はこれを理解していません。

+0

[Ninjectを使用してカスタムメンバーシップメントプロバイダにリポジトリを挿入する](http://stackoverflow.com/questions/5596441/inject-repository-to-custom-membership-provider-with-ninject) –

答えて

9

私はASP.NETフレームワークのこの側面は非常に多くの設定を駆動すると信じています。あなたの最後のコメント、その意味することは代わりに(コンポーネントが作成されているときに発生する)コンストラクタ・インジェクションに頼るので、あなたの代わりにセッター・インジェクションを使用することができるということですについては

、例えば:

public class BasicRoleProvider : RoleProvider 
{ 
    public BasicRoleProvider() { } 

    [Inject] 
    public IMyService { get; set; } 
} 

それは自動的になります登録された型のインスタンスをプロパティに挿入します。

public void Application_Start(object sender, EventArgs e) 
{ 
    var kernel = // create kernel instance. 
    kernel.Inject(Roles.Provider); 
} 

コンフィグレーションにロールプロバイダを登録していると仮定して、アプリケーションから電話をかけることができます。この方法でプロバイダを登録すると、プロバイダの実装とアプリケーションが依然として非常に分離されているため、優れたモジュール性が得られます。

+0

これは機能しません。インスタンスはまだnullです。 –

+0

私は 'kernel.Inject(Roles.Provider)'と 'kernel.Inject(Membership.Provider)'を試しました。 –

+0

うん、これを 'kernel.Inject(Roles.Provider)'でテストしました。設定コードと注入しようとしているRoleProviderコードで質問を更新できますか? RoleProviderをデフォルトとして設定したことを確認できますか? –

関連する問題