1

ハブとリポジトリの両方を同時に動作させることができません。バインディングを行うために 2 つの異なるカーネルが使用されているためだと思います。以下で参照されている推奨される修正 (1 つのカーネル) を実行すると、クライアント側でブロードキャスト メッセージの処理が停止します。

SignalR Stock Tickerに基づいてアプリケーションを作成しました。期待どおりに機能しました。次に、SignalR の依存性注入に従って、Ninject に DI を組み込みました。これもうまくいきました。次に、サービス プロジェクトをソリューションに追加しました。私のバインディングを NinjectWebCommon に追加して、私のサービスのリポジトリを含めました。リポジトリを含めるようにシングルトン クラスを変更しました。

    public class AndonDisplay : IAndonDisplay
{
    private readonly IReadOnlyRepository _repo;
    private readonly AndonDisplayMsgSet _msgSet;

    private readonly object _updateAndonDisplayLock = new object();
    private volatile bool _updatingAndonDisplay = false;

    public AndonDisplay(IHubConnectionContext<dynamic> clients, IReadOnlyRepository repo)
    {
        _repo = repo;
        Clients = clients;
        _msgSet = new AndonDisplayMsgSet { Advisory = "", Maintenance = "<div class='lblDT'>OK</div>", Supervisor = "OK", Materials = "OK" };
    }

この時点で、シングルトンは呼び出されません。私が見ることができるエラーメッセージはありません。単に呼び出されません。次に、以下にリンクされている投稿「元の質問...」で最も多くの票を得て、提案された変更を回答に加えました。これにより、Clients.All ブロードキャスト以外のすべてが修正されました。クライアント側で処理されていませんでした。シングルトンで動作するレポがあります。Clients.All が呼び出されているのがわかります。クライアント側のスクリプトは実行されません。

この開発者の質問を見つけました...元の質問が投稿されました。 開発者が投稿された最後の「回答」のコメントで述べているように...

「... 2 つのピースを組み合わせる方法がわかりません。Stock Ticker サンプルでは、​​Startup.cs でカーネルを作成していますが、NinjectWebCommon でカーネルも作成していますが、彼らはそれについて知りません。お互い。

誰かがこれに対する解決策を持っていますか?

アップデート:

バインディング ステートメントから .InSingletonScope() を削除すると、次のようになります。

            kernel.Bind<IAndonDisplay>().To<AndonDisplay>(); //.InSingletonScope();  // Make it a singleton object.

IAndonDisplay が注入された私のハブには、完全に機能するリポジトリがありますか?!?!

これが私のNinjectWebCommon RegisterServicesです

        private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<AndonVistechContext>().ToSelf().InRequestScope();
        kernel.Bind<IRepository>().To<EntityFrameworkRepository<AndonVistechContext>>().InRequestScope();
        kernel.Bind<IReadOnlyRepository>().To<EfReadOnlyRepository.EntityFrameworkReadOnlyRepository<AndonVistechContext>>().InRequestScope();
        kernel.Bind<IAndonDisplay>().To<AndonDisplay>(); //.InSingletonScope();  // Make it a singleton object.
        kernel.Bind(typeof(IHubConnectionContext<dynamic>)).ToMethod(context => GlobalHost.DependencyResolver.Resolve<IConnectionManager>().GetHubContext<AndonDisplayHub>().Clients).WhenInjectedInto<IAndonDisplay>();
    }

明らかな何かが欠けていると確信しています。

4

0 に答える 0