Example #1
0
        ///<summary>
        /// Registers all services needed to use RequestHandlers.Mvc
        /// This method implicitly adds Mvc as it is needed by RequestHandlers.Mvc
        ///</summary>
        public static IServiceCollection AddRequestHandlers(this IServiceCollection services, params Assembly[] assemblies)
        {
            // Services used by RequestHandlers.Mvc
            services.AddTransient <IWebRequestProcessor, DefaultWebRequestProcessor>();
            services.AddTransient <IRequestDispatcher, DefaultRequestDispacher>();
            services.AddTransient <IRequestHandlerResolver>(x => new DefaultRequestHandlerResolver(x));

            // Helper to create the generic interfaces
            var requestHandlerInterface = typeof(IRequestHandler <,>);

            // Get all RequestHandlerDefinitions from the given assemblies
            var requestHandlerDefinitions = RequestHandlerFinder.InAssembly(assemblies);

            // Register them as services
            foreach (var requestHandler in requestHandlerDefinitions)
            {
                services.Add(new ServiceDescriptor(requestHandlerInterface.MakeGenericType(requestHandler.RequestType, requestHandler.ResponseType), requestHandler.RequestHandlerType, ServiceLifetime.Transient));
            }

            // Add them to Mvc so they can be used as controllers
            services
            .AddMvc()
            .AddApplicationPart(RequestHandlerControllerBuilder.Build(requestHandlerDefinitions));
            return(services);
        }
        public void Execute(List <string> inputPaths, string outputPath)
        {
            var assemblies = LoadAssembliesHelper.Load(inputPaths);
            var requestHandlerDefinitions = RequestHandlerFinder.InAssembly(assemblies);

            var definitions = requestHandlerDefinitions.SelectMany(x => x.RequestType.GetTypeInfo()
                                                                   .GetCustomAttributes <HttpRequestAttribute>(true),
                                                                   (definition, attribute) => new HttpRequestHandlerDefinition(attribute, definition)).ToArray();

            var files = new GenerateTypescript().GenerateContractsForRequests(definitions).Concat(new[]
            {
                new KeyValuePair <string, string>("common.ts", @"import {Observable} from 'rxjs/Observable';
export interface IRequestDispatcher {
    execute<TResponse>(request: HttpRequest<TResponse>): Observable<TResponse>;
}
export interface HttpRequest<TResponse> {
    route: string;
    queryString?: {[key: string]: string},
    body?: any,
    method: string;
}
")
            });

            new SyncFiles().DoSync(outputPath, files);
        }
Example #3
0
        public void Configuration(IAppBuilder app)
        {
            var builder = new Autofac.ContainerBuilder();

            builder.RegisterType <DefaultRequestDispacher>().As <IRequestDispatcher>();
            builder.RegisterType <RequestHandlerResolver>().As <IRequestHandlerResolver>();
            builder.RegisterType <DefaultWebApiRequestProcessor>().As <IWebApiRequestProcessor>();
            var requestHandlerInterface   = typeof(IRequestHandler <,>);
            var requestHandlerDefinitions = RequestHandlerFinder.InAssembly(this.GetType().GetTypeInfo().Assembly);

            foreach (var requestHandler in requestHandlerDefinitions)
            {
                builder.RegisterType(requestHandler.RequestHandlerType)
                .As(requestHandlerInterface.MakeGenericType(requestHandler.RequestType, requestHandler.ResponseType));
            }



            var config    = new HttpConfiguration();
            var generated = config.ConfigureRequestHandlers(requestHandlerDefinitions);

            builder.RegisterApiControllers(generated);

            var container = builder.Build();

            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
            // Register the Autofac middleware FIRST, then the Autofac Web API middleware,
            // and finally the standard Web API middleware.
            config.MapHttpAttributeRoutes();
            app.UseAutofacMiddleware(container);
            app.UseAutofacWebApi(config);
            app.UseWebApi(config);



            config.EnableSwagger(c =>
            {
                c.SingleApiVersion("v1", "RequestHandlers.TestHost");
            })
            .EnableSwaggerUi(c =>
            {
            });
        }