Azure Web Job内の呼び出しスコープバインディングでNinjectを構成するにはどうすればよいですか?

Shubhajyoti Ghosh

Webジョブスケジューラを作成しようとすると問題が発生します。EFリポジトリパターンを使用したNinjectスコープバインディングを使用しています。ただしInSingletonScope()、期待どおりに機能するだけです。RequestScopeまたはスコープを呼び出す方法で構成しますか?

//コンテキストを登録します

    Kernel.Bind<MyDbContext>().ToSelf().InSingletonScope();
    Kernel.Bind<IUnitOfWork<MyDbContext>>().To<UnitOfWork<MyDbContext>>().InSingletonScope();
Shubhajyoti Ghosh

以前の投稿の1つから解決された問題

ステップバイステップのソリューションを投稿しています

(1.)NinjectJobActivator

    public class NinjectJobActivator : IJobActivator
    {
        #region Variable Declaration
        private readonly IResolutionRoot _resolutionRoot;
        #endregion

        #region CONSTRUCTOR
        /// <summary>
        /// 
        /// </summary>
        /// <param name="kernel"></param>
       // public NinjectJobActivator(IKernel kernel)
        public NinjectJobActivator(IResolutionRoot resolutionRoot)
        {
            _resolutionRoot = resolutionRoot;
        }
        #endregion


        #region CreateInstance
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public T CreateInstance<T>()
        {
            return _resolutionRoot.Get<T>(new CallScopedParameter());
        }
        #endregion
    }

(2)NinjectBindings

using Ninject.Extensions.Conventions;
using Ninject.Extensions.NamedScope;

public class NinjectBindings : NinjectModule
    {
        public override void Load()
        {
            //Register Context
            Kernel.Bind<MyDbContext>().ToSelf()
                  .When(x => x.Parameters.OfType<CallScopedParameter>().Any())
                  .InCallScope();  // For Scheduler

            Kernel.Bind<IUnitOfWork<MyDbContext>>().To<UnitOfWork<MyDbContext>>();

            //Register Repository
            Kernel.Bind(x => x
           .FromAssemblyContaining<MyDbContext>()
           .SelectAllClasses()
           .InheritedFrom(typeof(IRepository<>))
           .BindDefaultInterface());

        }
    }

(3)Program.cs

static void Main()
        {
            using (IKernel kernel = new StandardKernel(new NinjectBindings()))
            {
                var config = new JobHostConfiguration()
                {
                    JobActivator = new NinjectJobActivator(kernel)
                };

                if (config.IsDevelopment)
                {
                    config.UseDevelopmentSettings();
                }

                // Timer Trigger
                config.UseTimers();

                var host = new JobHost(config);
                //// The following code ensures that the WebJob will be running continuously
                host.RunAndBlock();
            }

        }

(4)CallScopedParameter

public sealed class CallScopedParameter : IParameter
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="other"></param>
        /// <returns></returns>
        public bool Equals(IParameter other)
        {
            if (other == null)
            {
                return false;
            }

            return other is CallScopedParameter;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="context"></param>
        /// <param name="target"></param>
        /// <returns></returns>
        public object GetValue(IContext context, ITarget target)
        {
            throw new NotSupportedException("this parameter does not provide a value");
        }

        /// <summary>
        /// 
        /// </summary>
        public string Name
        {
            get { return typeof(CallScopedParameter).Name; }
        }

        /// <summary>
        /// this is very important
        /// </summary>
        public bool ShouldInherit
        {
            get { return true; }
        }
    }

(5)AzureWebジョブ機能

public void DoSomething([TimerTrigger("*/30 *  * * * *")] TimerInfo timer, TextWriter log)
        {
            try
            {

                var tempdetails = _sampleRepository.SearchFor(x=> DateTime.UtcNow > x.DateTo);

                foreach (var detail in tempdetails)
                {
                    if (detail.ID == 2)
                    {
                        detail.ID = 5;
                    }
                    _sampleRepository.Update(detail);
                }

                 _unitOfWork.Commit();

            }
            catch (Exception ex)
            {
                log.WriteLine(ex.Message);
            }

        } 

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Web ジョブ コンソール アプリのデプロイされた構成ファイルの内容ではなく、Azure ポータル ストレージ接続文字列を使用する Web ジョブを取得するにはどうすればよいですか?

分類Dev

Azure Web Appのカスタムセクションでweb.config値をオーバーライドするにはどうすればよいですか?

分類Dev

Azure Web Appデプロイメントスロットでデータベースを交換するにはどうすればよいですか?

分類Dev

AzureのWebアプリをMySQLデータベースにリンクするにはどうすればよいですか?

分類Dev

Azure Webアプリにサブドメインを追加するにはどうすればよいですか?

分類Dev

Azureの2つの異なるポートでコンテナーのWebアプリを公開するにはどうすればよいですか?

分類Dev

Azure Web Appの複数のアプリケーションインサイトの実行を停止するにはどうすればよいですか?

分類Dev

Azure VM内のこのIIS内のWebサイトを常にオンに設定するにはどうすればよいですか?

分類Dev

AzureクラウドサービスでAPIとWebクライアントのSSLを設定するにはどうすればよいですか?

分類Dev

AzureでホストされているWebアプリとWindowsのIISサーバーでホストされているWebアプリケーションに同じカスタムドメインを使用するにはどうすればよいですか?

分類Dev

Azure Armテンプレートを使用してAzure Webジョブを作成するにはどうすればよいですか?

分類Dev

Azure Machine Learning Servicesで既存のWebサービスを新しいDockerイメージで更新するにはどうすればよいですか?

分類Dev

Webアプリケーション、管理サイト、およびWebAPIをAzureの1つのWebサイトにマージするにはどうすればよいですか?

分類Dev

Windows Azure(OS、またはWebサイト)でPerfect ForwardSecrecyを構成するにはどうすればよいですか

分類Dev

ASP.NET MVC 5WebアプリをAzureの仮想ネットワークにデプロイするにはどうすればよいですか

分類Dev

Azure Web Apps forContainersでDockerLinuxコンテナーとドライブを共有するにはどうすればよいですか?

分類Dev

Azure Webアプリケーション(App Service / Webサイト)をネットワークセキュリティグループに接続するにはどうすればよいですか?

分類Dev

Tornado Webサーバー内でブロッキング呼び出しを見つけるにはどうすればよいですか?

分類Dev

Windows Azure Webサイトでダウンロードとして.exeファイルを提供するにはどうすればよいですか?

分類Dev

AzureポータルからWebアプリのアプリケーションインサイトモニタリング(マップ解除)を削除するにはどうすればよいですか?

分類Dev

コードをリバースエンジニアリングしてWebページプラグインを作成する場合、特定の要素がイベントを受信したときに呼び出される関数を見つけるにはどうすればよいですか?

分類Dev

アプリケーションサーバーとは独立して、Java Webアプリケーションでファイルアップロード用の文字セット/エンコーディングを構成するにはどうすればよいですか?

分類Dev

Webサイトのインターフェイスを操作するにはどうすればよいですか?Pythonでプログラムを呼び出すにはどうすればよいですか?

分類Dev

Azure Webアプリボットで実装する独自のAPI(API Search EndPointがある)を持つサードパーティのデータベースからデータをロードするにはどうすればよいですか?

分類Dev

プライベートIPを介してAzureクラウドサービス(Webロール)インスタンスにアクセスするにはどうすればよいですか?

分類Dev

Azure Webアプリでエラー500を解決するにはどうすればよいですか?

分類Dev

Azure Resource ManagerデプロイメントテンプレートでWebサイトのロール割り当てを作成するにはどうすればよいですか?

分類Dev

Webアプリケーション内で自動的に呼び出されるPythonスクリプトをデバッグするにはどうすればよいですか?

分類Dev

AzureアプリサービスでホストされているときにASP.NETコアWebアプリケーションに追加されたHTTP応答ヘッダーを制御するにはどうすればよいですか?

Related 関連記事

  1. 1

    Web ジョブ コンソール アプリのデプロイされた構成ファイルの内容ではなく、Azure ポータル ストレージ接続文字列を使用する Web ジョブを取得するにはどうすればよいですか?

  2. 2

    Azure Web Appのカスタムセクションでweb.config値をオーバーライドするにはどうすればよいですか?

  3. 3

    Azure Web Appデプロイメントスロットでデータベースを交換するにはどうすればよいですか?

  4. 4

    AzureのWebアプリをMySQLデータベースにリンクするにはどうすればよいですか?

  5. 5

    Azure Webアプリにサブドメインを追加するにはどうすればよいですか?

  6. 6

    Azureの2つの異なるポートでコンテナーのWebアプリを公開するにはどうすればよいですか?

  7. 7

    Azure Web Appの複数のアプリケーションインサイトの実行を停止するにはどうすればよいですか?

  8. 8

    Azure VM内のこのIIS内のWebサイトを常にオンに設定するにはどうすればよいですか?

  9. 9

    AzureクラウドサービスでAPIとWebクライアントのSSLを設定するにはどうすればよいですか?

  10. 10

    AzureでホストされているWebアプリとWindowsのIISサーバーでホストされているWebアプリケーションに同じカスタムドメインを使用するにはどうすればよいですか?

  11. 11

    Azure Armテンプレートを使用してAzure Webジョブを作成するにはどうすればよいですか?

  12. 12

    Azure Machine Learning Servicesで既存のWebサービスを新しいDockerイメージで更新するにはどうすればよいですか?

  13. 13

    Webアプリケーション、管理サイト、およびWebAPIをAzureの1つのWebサイトにマージするにはどうすればよいですか?

  14. 14

    Windows Azure(OS、またはWebサイト)でPerfect ForwardSecrecyを構成するにはどうすればよいですか

  15. 15

    ASP.NET MVC 5WebアプリをAzureの仮想ネットワークにデプロイするにはどうすればよいですか

  16. 16

    Azure Web Apps forContainersでDockerLinuxコンテナーとドライブを共有するにはどうすればよいですか?

  17. 17

    Azure Webアプリケーション(App Service / Webサイト)をネットワークセキュリティグループに接続するにはどうすればよいですか?

  18. 18

    Tornado Webサーバー内でブロッキング呼び出しを見つけるにはどうすればよいですか?

  19. 19

    Windows Azure Webサイトでダウンロードとして.exeファイルを提供するにはどうすればよいですか?

  20. 20

    AzureポータルからWebアプリのアプリケーションインサイトモニタリング(マップ解除)を削除するにはどうすればよいですか?

  21. 21

    コードをリバースエンジニアリングしてWebページプラグインを作成する場合、特定の要素がイベントを受信したときに呼び出される関数を見つけるにはどうすればよいですか?

  22. 22

    アプリケーションサーバーとは独立して、Java Webアプリケーションでファイルアップロード用の文字セット/エンコーディングを構成するにはどうすればよいですか?

  23. 23

    Webサイトのインターフェイスを操作するにはどうすればよいですか?Pythonでプログラムを呼び出すにはどうすればよいですか?

  24. 24

    Azure Webアプリボットで実装する独自のAPI(API Search EndPointがある)を持つサードパーティのデータベースからデータをロードするにはどうすればよいですか?

  25. 25

    プライベートIPを介してAzureクラウドサービス(Webロール)インスタンスにアクセスするにはどうすればよいですか?

  26. 26

    Azure Webアプリでエラー500を解決するにはどうすればよいですか?

  27. 27

    Azure Resource ManagerデプロイメントテンプレートでWebサイトのロール割り当てを作成するにはどうすればよいですか?

  28. 28

    Webアプリケーション内で自動的に呼び出されるPythonスクリプトをデバッグするにはどうすればよいですか?

  29. 29

    AzureアプリサービスでホストされているときにASP.NETコアWebアプリケーションに追加されたHTTP応答ヘッダーを制御するにはどうすればよいですか?

ホットタグ

アーカイブ