1

カスタムメンバーシッププロバイダーを持つASP.NETMVC3Webアプリを作成しています。Ninject.Extensions.Factory 3.0.0カスタムメンバーシッププロバイダーの公共施設に工場を注入しようとしていますが、うまくいきません。

これが私のカスタムメンバーシップクラスとファクトリインターフェイスです。

public class MtgMembershipProvider : MembershipProvider
{
    [Inject]
    public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }

    ...
}

public interface IUnitOfWorkFactory
{
    IUnitOfWork GetEFUnitOfWork();
}

これが私のメンバーシップ初期化モジュールです:

public class MtgMembershipInitializationModule : IHttpModule
{
    public MtgMembershipInitializationModule(MembershipProvider membershipProvider)
    {
    }

    public void Dispose()
    {            
    }

    public void Init(HttpApplication context)
    {
    }
}

NinjectWebCommon.csのRegisterServicesコードは次のとおりです。

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IUnitOfWork>()
        .To<EFUnitOfWork>()
        .NamedLikeFactoryMethod((IUnitOfWorkFactory f) => f.GetEFUnitOfWork());

    kernel.Bind<MembershipProvider>().ToMethod(ctx => Membership.Provider);
    kernel.Bind<IHttpModule>().To<MtgMembershipInitializationModule>();
}

web.configには、次のものがあります。

<system.web>
  <membership defaultProvider="MtgMembershipProvider">
    <providers>
      <clear />
      <add name="MtgMembershipProvider" type="MtgManager.WebUI.Infrastructure.MtgMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="MtgManager_WebUI" />
    </providers>
  </membership>
</system.web>

Webアプリケーションを起動すると、モジュールの初期化中に例外が発生します。

Error activating IUnitOfWorkFactory
No matching bindings are available, and the type is not self-bindable.
Activation path:
 3) Injection of dependency IUnitOfWorkFactory into property UnitOfWorkFactory of type MtgMembershipProvider
 2) Injection of dependency MembershipProvider into parameter membershipProvider of constructor of type MtgMembershipInitializationModule
 1) Request for IHttpModule

Suggestions:
 1) Ensure that you have defined a binding for IUnitOfWorkFactory.
 2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
 3) Ensure you have not accidentally created more than one kernel.
 4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.
 5) If you are using automatic module loading, ensure the search path and filters are correct.

何が間違っているのかわかりません。Ninject3.0.0を使用したASP.NETプロバイダーの依存性注入に関するRemoGloorのブログ投稿、関連するStackExchangeの議論、およびNamedLikeFactoryMethodに関するこの質問や他の多数の投稿をフォローしましたが、行き詰まっています。私は何が欠けていますか?

4

1 に答える 1

1

あなたはあなたの工場を拘束しなければなりません

Bind<IUnitOfWorkFactory>().ToFactory();
于 2012-10-08T00:05:08.323 に答える