Exemplo n.º 1
0
        /// <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();
                }
            }));
        }
Exemplo n.º 2
0
        /// <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();
                }
            }));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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;
        }
Exemplo n.º 5
0
 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));
 }