ハブとリポジトリの両方を同時に動作させることができません。バインディングを行うために 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>();
}
明らかな何かが欠けていると確信しています。