本文整理汇总了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 });
}
}
}