第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ASP.NET Core 中 Redis 中頻道的訂閱方法

ASP.NET Core 中 Redis 中頻道的訂閱方法

C#
精慕HU 2023-09-24 10:55:45
我嘗試使用 StackExchange.Redis 作為消息代理。它工作得很好,但我現(xiàn)在有一個缺點。我需要 MQ 來通信 2 個 ASP.NET Core 項目。 ConnectionMultiplexer有一個Subscriber方法將相同的 Action 委托訂閱到 MQ。有什么辦法可以不通過Startup課堂來做到這一點嗎?首先,我嘗試借助屬性類來實現(xiàn)這一點,代碼如下public class FireAndForgetAttribute<T> : Attribute{    public FireAndForgetAttribute(IConnectionMultiplexer plexer, string channelName, Action<T> reaction)    {            var subscriber = plexer.GetSubscriber();            subscriber.Subscribe(channelName, (channel, message) =>             {                var data = JsonConvert.Deserialize<T>(message);                reaction.Invoke(data);            }, flags: CommandFlags.FireAndForget);    }}但這不是一個好方法,因為 C# 中仍然沒有通用屬性(只是在路線圖中標記為討論的,沒有其他),而且我也無法在這里傳遞Action<T>具體對象。PPS 抱歉,我忘了改變我的問題的主題?,F(xiàn)在是正確的了。
查看完整描述

1 回答

?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

我這樣做了,那是很久以前的事了,使用 Nancy、EasyQ 和 DryIOC


它不是基于屬性而是基于類


將注冊所有具體類的輔助方法IPipeline


RegisterMultipleTypesToContainer(container, typeof(IPipeline));

我想這就是 Scutor 所做的,但當時沒有 scutor,所以必須使用 Reflection,然后訂閱......


private void RegisterMultipleTypesToContainer(IContainer container, Type type)

{

  var allTypes = AppDomain.CurrentDomain.GetAssemblies()

                         .Where(x => 

                               x.FullName.StartsWith("MyAssembly", StringComparison.Ordinal))SelectMany(x => x.GetTypes());


   var types = allTypes.Where(x => type.IsAssignableFrom(x) && x.IsClass && !x.IsAbstract).ToList();


            foreach (var concreteTypes in types)

            {

                var genericTypes = concreteTypes.GetInterfaces().Where(x => x != type).ToList();

                foreach (var genericType in genericTypes)

                {

                    container.Register(genericType, concreteTypes, Reuse.Singleton);

                    var pipeline = container.Resolve(genericType) as IPipeline;

                    pipeline.Subscribe();

                }

            }

        }


 public class HelloPipeline :

        BasePipeline<HelloPipeline.Message>

    {

    IBusService _bus;

    HelloPipeline(IBusService bus){

     _bus = bus;

     }

    private Task ExecuteAsync(String channel, ) { }

       public void Subscribe()

        {

            _bus.SubscribeAsync<T>(this.GetType().Name, this.ExecuteAsync);

        }

    }


剛剛檢查了舊代碼,但仍然有效,希望它能給您一個想法,但我認為您想要實現(xiàn)的目標與我所做的相同,但使用其他工具


查看完整回答
反對 回復 2023-09-24
  • 1 回答
  • 0 關注
  • 163 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號