private void RegisterHandlersInInvoker() { foreach (var handlersAssembly in HandlersAssemblies) { var handlers = (from type in handlersAssembly.GetTypes() from typeInterface in type.GetInterfaces() where typeInterface.IsGenericType let genericDefinition = typeInterface.GetGenericTypeDefinition() where genericDefinition == typeof(ICommandHandler <>) || genericDefinition == typeof(IRequestHandler <>) || genericDefinition == typeof(IEventHandler <>) select typeInterface).ToList(); foreach (var handler in handlers) { var actionType = handler.GetGenericArguments(); var handlerType = handler.GetGenericTypeDefinition(); var registerHandlerMethod = (from method in m_handlerInvoker.GetType().GetMethods() where method.IsGenericMethod && method.Name == "RegisterHandler" let methodParams = method.GetParameters() where methodParams.Length == 1 let methodParam = methodParams[0] where methodParam.ParameterType.Name == handlerType.Name && methodParam.ParameterType.Assembly == handlerType.Assembly let genericMethod = method.MakeGenericMethod(actionType) select genericMethod).Single(); registerHandlerMethod.Invoke(m_handlerInvoker, new[] { m_container.Resolve(handler) }); } } }