Github Mediator

使用方法

    /// <summary>
/// 返回值 BaseEntity
/// </summary>
public class Ping1 : IRequest<BaseEntity>
{
public string Name { get; set; }
public int Val { get; set; }
} /// <summary>
/// 不带返回值
/// </summary>
public class Ping2 : IRequest
{
public string Name { get; set; }
public int Val { get; set; }
} public class BaseEntity
{
public bool Flag { get; set; }
public int Val { get; set; }
}
    public class PingHandler1 : IRequestHandler<Ping1, BaseEntity>
{
public Task<BaseEntity> Handle(Ping1 request, CancellationToken cancellationToken)
{
Console.WriteLine("传入值 {0} .带有返回值", request.Val);
return Task.FromResult(new BaseEntity() { Val = request.Val * 2 });
}
}
    public class PingHandler2 : IRequestHandler<Ping2>
{
public Task Handle(Ping2 message, CancellationToken cancellationToken)
{
Console.WriteLine("传入值 {0} .不带返回值", message.Val);
return Task.FromResult("");
}
}
        static void Main(string[] args)
{ DoAsync();
Console.ReadLine();
}
public static async void DoAsync()
{
var mediator = BuildMediator(); var response = await mediator.Send(new Ping1 { Val = 666 }); Console.WriteLine("传出值 {0} .", response.Val); await mediator.Send(new Ping2 { Val = 666 }); Console.ReadLine();
} private static IMediator BuildMediator()
{
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(typeof(IMediator).GetTypeInfo().Assembly).AsImplementedInterfaces();//注册IMediator自身的组件 var mediatrOpenTypes = new[]
{
typeof(IRequestHandler<,>),
typeof(IRequestHandler<>),
typeof(INotificationHandler<>),
}; foreach (var mediatrOpenType in mediatrOpenTypes)
{
//
//builder
// .RegisterAssemblyTypes(typeof(Ping).GetTypeInfo().Assembly)
// .AsClosedTypesOf(mediatrOpenType)
// .AsImplementedInterfaces();
builder
.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.AsClosedTypesOf(mediatrOpenType)
.AsImplementedInterfaces();
} // It appears Autofac returns the last registered types first 显示指定泛型解析
//builder.RegisterGeneric(typeof(RequestPostProcessorBehavior<,>)).As(typeof(IPipelineBehavior<,>));
//builder.RegisterGeneric(typeof(RequestPreProcessorBehavior<,>)).As(typeof(IPipelineBehavior<,>));
//builder.RegisterGeneric(typeof(GenericRequestPreProcessor<>)).As(typeof(IRequestPreProcessor<>));
//builder.RegisterGeneric(typeof(GenericRequestPostProcessor<,>)).As(typeof(IRequestPostProcessor<,>));
//builder.RegisterGeneric(typeof(GenericPipelineBehavior<,>)).As(typeof(IPipelineBehavior<,>));
//builder.RegisterGeneric(typeof(ConstrainedRequestPostProcessor<,>)).As(typeof(IRequestPostProcessor<,>));
//builder.RegisterGeneric(typeof(ConstrainedPingedHandler<>)).As(typeof(INotificationHandler<>)); builder.Register<SingleInstanceFactory>(ctx =>
{
var c = ctx.Resolve<IComponentContext>();
return t => c.Resolve(t);
}); builder.Register<MultiInstanceFactory>(ctx =>
{
var c = ctx.Resolve<IComponentContext>();
return t => (IEnumerable<object>)c.Resolve(typeof(IEnumerable<>).MakeGenericType(t));
}); var container = builder.Build(); // The below returns:
// - RequestPreProcessorBehavior
// - RequestPostProcessorBehavior
// - GenericPipelineBehavior //var behaviors = container
// .Resolve<IEnumerable<IPipelineBehavior<Ping, Pong>>>()
// .ToList(); var mediator = container.Resolve<IMediator>(); return mediator;
}

输出:

最新文章

  1. Nginx配置性能优化
  2. maven创建的Web工程,Eclipse 内 tomcat容器不识别的处理方法
  3. [原创]cocos2dx加载网络图片&amp;异步加载图片
  4. Sea.js创始人玉伯的前端开发之路
  5. ThinkPHP讲解(八)——显示、修改、添加、删除
  6. Scala List的排序函数sortWith
  7. Linux下php+mysql+nginx编译搭建(一)
  8. 皴EBS R12应用程序和数据库用户password
  9. JAVA进程占用CPU分析
  10. 笔记:Spring Cloud Feign 声明式服务调用
  11. appium+python测试app使用相对坐标定位元素
  12. 如何通过ajax来获取返回值
  13. Linux背背背(3)
  14. 七年一冠、IG牛13的背后是什么!
  15. NIO中的heap Buffer和direct Buffer区别
  16. 远程执行命令和文件分发shell脚本
  17. django模板语言的注释
  18. 2017战略No.1:坚定不移地走全产业链发展路线
  19. 浅谈Lambda表达式详解
  20. 解决RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large问题

热门文章

  1. switch穿透中语句的执行顺序
  2. Vue中的v-model与my97日期选择插件冲突
  3. Javaee 内部引用
  4. hibernate详细配置
  5. jq操作table追加td
  6. Ubuntu环境搭建svn服务器
  7. EhCache缓存页面、局部页面和对象缓存
  8. Context - React跨组件访问数据的利器
  9. Linux中的gpio口使用方法
  10. 【codeforces 803D】Magazine Ad