1

Bootstrapper を使用して、アプリケーション、ioc、オートマッパー、構成などの初期化を行おうとしています。

ブートストラップを使用して asp.net webapi で ninject を正しくセットアップする方法について、いくつかの指示が必要です。次の構成では、apicontroller は IMyService 依存関係を解決できません。別の ninject カーネルを使用しているようです。

私のNinjectWebCommon

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>();

        GlobalConfiguration.Configuration.DependencyResolver = new MyResolver(kernel);

        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)
    {
    }        
}

ブートストラップ ninject 登録

public class DIRegistration : INinjectRegistration
{
    public void Register(IKernel container)
    {
        container.Bind<IMyService>().To<MyService>().InTransientScope();
    }
}

public class MyService: IMyService
{
    public string GetString()
    {
        return "My String!!!!!";
    }
}

public interface IMyService 
{
    string GetString();
}
4

3 に答える 3

1

問題を解決するために私がしたことはbootstrapper.Initialize(CreateKernel);、NinjectWebBootstrap 用に作成した IStartupTask 実装に移行することです。基本的に、Bootstrapper フレームワークによって注入された IKernal を使用して登録を実行し、最後に asp.net webapi を設定してから、注入された IKernal インスタンスを取り込むカスタム解決で DepdendencyResolver を設定します。

于 2013-03-21T22:07:38.873 に答える
0

DIRegistration使用されることはありません。そのため、バインディングは存在しません。

于 2013-03-19T21:52:26.347 に答える
0

データベースで値を直接更新しようとしましたが、svc ファイルで Ninject を使用してエンティティ フレームワークを使用する WCF で値が更新されませんでした - https://github.com/ninject/ninject.extensions.wcf/treeと同じ方法/master/src/Examples/WcfTimeServiceおよびブートストラップの使用。

IIS アプリ プールをリサイクルすると、データが更新され、期待どおりに動作することがわかった場合。このキャッシュの問題を引き起こしているのは IIS と Ninject だと思います。それについて何か考えはありますか?

于 2013-03-21T22:43:26.990 に答える