5

私は StructureMap を少し使って、インターフェイスの具象型リポジトリを (コンストラクター注入によって) コントローラーに注入することができました。

ここで、カスタム メンバーシップ プロバイダーにリポジトリ タイプを挿入する必要があります。しかし、どのように?私のカスタム メンバーシップ プロバイダーはMembership.Provider.ValidateUser(たとえば) を通じて作成されます。

コントローラーの場合、次のようなクラスを作成しました。

public class IocControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(
        System.Web.Routing.RequestContext requestContext, 
        Type controllerType)
    {
        return (Controller)
            ObjectFactory.GetInstance(controllerType);
    }
}

Global.asax、でApplication_Start():

//...
ObjectFactory.Initialize(x =>
{
    x.AddRegistry(new ArticleRegistry());
}
                                    );


ControllerBuilder.Current.SetControllerFactory(
    new IocControllerFactory());
//...

しかし、StructureMap を使用してカスタム メンバーシップ プロバイダーに具象型を挿入するにはどうすればよいでしょうか。

4

1 に答える 1

3

この場合、注射する方法はないと思います。

インジェクションは、必要なインスタンスを作成する「ファクトリ」がインジェクションについて知っている場合にのみ機能し、メンバーシップ プロバイダーの領域が残念ながら古くなっています。物事が異なって行われたときにコード化されました:)。

ASP.NET MVC (バージョン 2 以降) でカスタム メンバーシップ プロバイダーを使用している場合は、次のように DependencyResolver から要求することで、必要なものを取得できます。

DependencyResolver.Current.GetService<IRepository<User>>();

または、ObjectFactory を直接使用することもできます。

于 2012-07-31T11:13:58.237 に答える