/// <summary> /// OWIN middleware registration extension /// </summary> /// <param name="app"></param> /// <param name="featureConfiguration"></param> /// <param name="microServiceConfiguration"></param> /// <returns></returns> public static IAppBuilder MapFeature(this IAppBuilder app, BaseFeatureConfiguration featureConfiguration, MicroServiceConfiguration microServiceConfiguration) { featureConfiguration.MicroServiceConfiguration = microServiceConfiguration; var mediator = new Mediator(featureConfiguration); return(app.Use(async(IOwinContext context, Func <Task> next) => { if (!mediator.Dispatch(HttpContext.Current)) { await next.Invoke(); } })); }
/// <summary> /// .Net core middleware registration extension /// </summary> /// <param name="app"></param> /// <param name="featureConfiguration"></param> /// <param name="microServiceConfiguration"></param> /// <returns></returns> public static IApplicationBuilder UseFeature(this IApplicationBuilder app, BaseFeatureConfiguration featureConfiguration, MicroServiceConfiguration microServiceConfiguration) { featureConfiguration.MicroServiceConfiguration = microServiceConfiguration; var mediator = new Mediator(featureConfiguration); return(app.Use(async(httpContext, next) => { if (!mediator.Dispatch(httpContext)) { await next(); } })); }
internal static object CreateProxy(object decorated, Type interfaceType, BaseFeatureConfiguration featureConfiguration) { var type = typeof(FeatureClient); object proxy = type .GetMethod("Create", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) .MakeGenericMethod(interfaceType, type) .Invoke(null, null); ((FeatureClient)proxy).SetDecorated(decorated); ((FeatureClient)proxy).SetConfioguration(featureConfiguration); return(proxy); }
/// <summary> /// CTOR /// </summary> /// <param name="configuration"></param> public Mediator(BaseFeatureConfiguration configuration) { if (configuration.IsNull() || configuration.MicroServiceConfiguration.IsNull()) { throw new ArgumentNullException(nameof(configuration.MicroServiceConfiguration)); } var requiringType = typeof(IFeature); var serverType = Directory .GetFiles(AppContext.BaseDirectory, "*.dll") .Select(Assembly.LoadFrom) .SelectMany(assembly => assembly.LoadAllTypesFromAssembly()) .Where(x => (x.GetInterfaces().Contains(requiringType) || x.IsSubclassOf(requiringType)) && !x.IsInterface && !x.IsAbstract) .Where(x => x.GetConstructors().Any(ctor => ctor.GetParameters().Any() && ctor.GetParameters().All(param => param.ParameterType == configuration.GetType()))) .Distinct() .SingleOrDefault(); _server = Activator.CreateInstance(serverType, configuration) as IFeature; _serverMethods = serverType.GetMethods().ToDictionary(x => x.Name, x => x); configuration.MicroServiceConfiguration.SendRequestsToMicroService = false; _configuration = configuration; }
private void SetConfioguration(BaseFeatureConfiguration featureConfiguration) { _featureConfiguration = featureConfiguration; }
/// <summary> /// CTOR /// </summary> /// <param name="featureConfiguration"></param> /// <param name="fluentConfiguration"></param> public FluentFeatureConfigurationForService(BaseFeatureConfiguration featureConfiguration, FluentFeatureRegistrationService fluentConfiguration) { _featureConfiguration = featureConfiguration; _fluentConfiguration = fluentConfiguration; }
/// <summary> /// Initialize feature configuration /// </summary> /// <param name="featureConfiguration"></param> /// <returns></returns> public FluentFeatureConfigurationForService UseFeature(BaseFeatureConfiguration featureConfiguration) { return(new FluentFeatureConfigurationForService(featureConfiguration, this)); }