惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
博客园 - Franky
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
Microsoft Security Blog
Microsoft Security Blog
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)

博客园 - Leo

在Windows上使用Docker 创建MongoDB 副本集的极简方法(翻译) 19-EasyNetQ:用EasyNetQ.Hosepipe重新提交错误信息 18-EasyNetQ:发生错误的情况 17-EasyNetQ:非泛型的发布&订阅扩展方法 16-EasyNetQ之自动订阅者 15-EasyNetQ之对延迟消息插件的支持 - Leo - 博客园 14-EasyNetQ之用Future Publish发布预定中事件 13-EasyNetQ之发布者确认 12-EasyNetQ之消息版本控制 10-EasyNetQ之控制队列名称 9-EasyNetQ之基于主题的路由 - Leo - 博客园 8-EasyNetQ之Send & Receive 7-EasyNetQ之Request & Response 6-EasyNetQ之订阅 5-EasyNetQ之Publish(黄亮翻译) 4-EasyNetQ之Logging(黄亮翻译) 3-在EasyNetQ上使用SSL连接(黄亮翻译) 2-用EasyNetQ连接RabbitMQ(黄亮翻译) 1-EasyNetQ介绍(黄亮翻译) - Leo - 博客园
11-EasyNetQ之多态发布和订阅
Leo · 2017-07-09 · via 博客园 - Leo

你能够订阅一个接口,然后发布基于这个接口的实现。

让我们看下一个示例。我有一个接口IAnimal和两个实现Cat和Dog:

public interface IAnimal
{
    string Name { get; set; }
}

public class Cat : IAnimal
{
    public string Name { get; set; }
    public string Meow { get; set; }
}

public class Dog : IAnimal
{
    public string Name { get; set; }
    public string Bark { get; set; }
}

我能够订阅IAnimal接口,并接收Cat和Dog这个两个类:

bus.Subscribe<IAnimal>("polymorphic_test",
    @interface =>
    {
        var cat = @interface as Cat;
        var dog = @interface as Dog;

        if (cat != null)
        {
            Console.WriteLine("Name = {0}", cat.Name);
            Console.WriteLine("Meow = {0}", cat.Meow);
        }
        else if (dog != null)
        {
            Console.WriteLine("Name = {0}", dog.Name);
            Console.WriteLine("Bark = {0}", dog.Bark);
        }
        else
        {
            Console.WriteLine("message was not a
                dog or a cat");
        }
    }
);

让我们发布Cat和Dog:

var cat = new Cat
{
    Name = "Gobbolino",
    Meow = "Purr"
};

var dog = new Dog
{
    Name = "Rover",
    Bark = "Woof"
};

bus.Publish<IAnimal>(cat);
bus.Publish<IAnimal>(dog);

注意:必须显示的指定发布了IAnimal接口。EasyNetQ在发布和订阅方法中指定了泛型去发布和订阅。

英文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Polymorphic-Publish-and-Subscribe
本文地址:http://www.cnblogs.com/HuangLiang/p/EasyNetQ_Polymorphic_Publish_and_Subscribe.html