2012-02-21 9 views
4

私は、Autofacとカスタムメンバーシッププロバイダを使用してMVC3アプリを持っています。どのようにAutofacを使用してasp.net mvc3カスタムメンバーシッププロバイダを注入できますか?

ctorを使用してプロバイダを挿入しようとすると、「このオブジェクトに対して定義されたパラメータのないコンストラクタはありません」というエラーが表示されます。

public class MyMemberShipProvider : MembershipProvider 
    { 

     IUserRepository userRepository; 

    public MyMemberShipProvider(IUserRepository userRepository) 
     { 
      this.userRepository = userRepository; 

     } 
+0

あなたを避け、「グルー」コードはここにある - このようクリーナー、そのビットは、GetProviderへの呼び出しで解決しますhttp://blog.gauffin.org/2011/09/a-more-structured-membershipprovider/ – jgauffin

+0

ありがとう、良いチュートリアル:配管の世話をする私のカスタムメンバーシッププロバイダを使用することができます。 – tobias

答えて

7

組み込みプロバイダ(メンバーシップ/ロール)には挿入できません。 MVC 3 DependencyResolverをAutofacとともに使用することができます。 (ETC、ユーザを検証する)、これはサービスロケータアンチパターンであるように、アプリケーションコードで解決

簡単な例

...

public override bool ValidateUser(string username, string password) 
{ 
    var userRepo = DependencyResolver.Current.GetService<IUserRepository>(); 
    return userRepo.ValidateUser(username, password); 
} 
+0

へようこそStackOverflow Neil - 良い答え – petenelson

+3

残念なことに、これはサービスロケータの反パターンです:http://bugsquash.blogspot.com/2010/11/windsor-managed-membershipproviders.html –

+1

これは確かに反パターンです既存のASP.NETメンバーシッププロバイダを使用するという制約がある場合は、メンバシップおよび/またはロールが提供するもののすべてを書き直すか、このアンチパターンを導入する必要があります。代替案がかなりの量の作業である場合、アンチパターンは実行されないか死ぬことに注意してください。 – CodeMonkeyKing

-1

あなたのuserRepositoryも注入する必要があるからです。次のようなものがあります。

protected override void Load(ContainerBuilder builder) 
{ 
    builder.RegisterType<UserRepository>().As<IUserReposotory>(); 
    builder.RegisterType<MyMembershipProvider>(); 
} 
+0

MVC3がメンバーシップ・プロバイダの依存関係注入をサポートしていますか? – jgauffin

+0

不可能ではありません。 Neilは上記の答えを持っています。 –

+0

@Neilのようなビルトインのプロバイダでは、答えがASP.NETを使用してページライフサイクルの一環としてメンバーシッププロバイダにロードされます。これはMVC [1-4]に先行し、IoCコンテナの導入も前提としています。 – CodeMonkeyKing

1

避けます。あなたはあなたの '接着剤'コード/低レベルのコードでのみ解決したい。

これはウィンザー用ですが、実装を簡単に調整できます。 Castle Windsorについて概説したものがここにありますが、実装は似ているはずです。これ(などのvalidateUserなど)実際のメンバーシップ関数におけるサービスロケータアンチパターンの使用

http://bugsquash.blogspot.com/2010/11/windsor-managed-membershipproviders.html

関連する問題