0

私は大規模な MVC アプリに取り組んでおり、Ninject で DI を使用しようとしています。次のプロジェクトがあります。

コア - クラス ライブラリ (カスタム メンバーシップ プロバイダーを含む) ドメイン - クラス ライブラリ (IUserRepository などのデータにアクセスするためのインターフェイスと EF を含む) WebUI - MVC 3 プロジェクト

WebUI の App_Start コンテナー内の Ninject スタートアップで、IUserRepository を UserRepository にバインドしました。

public static class NinjectWebCommon 
{
    private static readonly Bootstrapper bootstrapper = new Bootstrapper();

    /// <summary>
    /// Starts the application
    /// </summary>
    public static void Start() 
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
        bootstrapper.Initialize(CreateKernel);
    }

    /// <summary>
    /// Stops the application.
    /// </summary>
    public static void Stop()
    {
        bootstrapper.ShutDown();
    }

    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);
        return kernel;
    }

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IUserRepository>().To<UserRepository>();
    }        
}

ただし、コア クラス ライブラリを使用してカスタマー メンバーシップ プロバイダーで UserRepository を使用したい...

public class MyMembershipProvider : MembershipProvider
{

    private IUserRepository userRepository;

    public MyMembershipProvider (IUserRepository repository)
    {
        this.userRepository = repository;
    }

    public override string ApplicationName
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

// Rest of methods....

ただし、私の Ninject の開始は WebUI プロジェクト内にあり、おそらくクラス ライブラリについて何も知らないため、これは失敗します。これらのクラス ライブラリにも依存関係を挿入する方法はありますか?

それとも、それらとその依存関係をコーディングする別の方法を検討する必要がありますか?

4

1 に答える 1