当前位置: 首页>>代码示例>>C#>>正文


C# Bus.GetType方法代码示例

本文整理汇总了C#中Bus.GetType方法的典型用法代码示例。如果您正苦于以下问题:C# Bus.GetType方法的具体用法?C# Bus.GetType怎么用?C# Bus.GetType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Bus的用法示例。


在下文中一共展示了Bus.GetType方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: RegisterHandlersInAssembly

        private static void RegisterHandlersInAssembly(IEnumerable<Assembly> assemblies, Type messageType, Bus.Bus bus, Type[] ctorArgTypes, object[] ctorArgs)
        {
            //among classes in handlers assemblies select any which handle specified message type
            var handlerTypesWithMessages = assemblies
                                        .SelectMany(a => a.GetTypes())
                                        .Where(t => !t.IsInterface && t.GetInterfaces()
                                            .Any(i => i.IsGenericType
                                                && i.GetGenericTypeDefinition() == typeof(IHandle<>)
                                                && messageType.IsAssignableFrom(i.GetGenericArguments().First())))
                                        .Select(t => new
                                        {
                                            Type = t,
                                            MessageTypes = t.GetInterfaces().Select(i => i.GetGenericArguments().First())
                                        });

            foreach (var handler in handlerTypesWithMessages)
            {
                var ctor = handler.Type.GetConstructor(ctorArgTypes);
                var handlerInstance = ctor.Invoke(ctorArgs);

                foreach (Type msgType in handler.MessageTypes)
                {
                    MethodInfo handleMethod = handler.Type
                                                .GetMethods()
                                                .Where(m => m.Name.Equals("Handle", StringComparison.OrdinalIgnoreCase))
                                                .First(m => msgType.IsAssignableFrom(m.GetParameters().First().ParameterType));

                    Type actionType = typeof(Action<>).MakeGenericType(msgType);
                    Delegate handlerDelegate = Delegate.CreateDelegate(actionType, handlerInstance, handleMethod);

                    MethodInfo genericRegister = bus.GetType().GetMethod("RegisterHandler").MakeGenericMethod(new[] { msgType });
                    genericRegister.Invoke(bus, new[] { handlerDelegate });
                }
            }
        }
开发者ID:MaximShishov,项目名称:EComWithCQRS,代码行数:35,代码来源:MessageHandlersRegister.cs


注:本文中的Bus.GetType方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。