Esempio n. 1
0
        public override void Configure(Funq.Container container)
        {
            container.RegisterAutoWired <PlayersRepository>();

            Plugins.Add(new ValidationFeature());

            container.RegisterValidators(typeof(AppHost).Assembly);
        }
Esempio n. 2
0
        public override void Configure(Funq.Container container)
        {
            JsConfig.EmitCamelCaseNames = true;
            JsConfig.IncludeNullValues  = true;
            JsConfig.DateHandler        = JsonDateHandler.ISO8601;

            LogManager.LogFactory = new DebugLogFactory();

            SetConfig(new EndpointHostConfig
            {
                WsdlServiceNamespace = "",
                AllowJsonpRequests   = true,
                DebugMode            = true,
                EnableFeatures       = Feature.All.Remove(GetDisabledFeatures())
            });

            //Authentication (see: https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/AuthTests.cs)
            Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                        new IAuthProvider[] {
                new BasicAuthProvider(),   //Sign-in with Basic Auth
            })
            {
                HtmlRedirect = null      /* prevent redirect to login page, make the user login using basic auth prompt */
            });
            userRepository = new InMemoryAuthRepository();
            container.Register <IUserAuthRepository>(userRepository);
            CreateUser(userRepository, 1, UserName, "DisplayName", null, Password);

            //NEW: Enable the validation feature and scans the service assembly for validators
            Plugins.Add(new ValidationFeature());
            container.RegisterValidators(typeof(Northwind.Data.Services.CategoryService).Assembly);

            //Caching
            container.Register <ICacheClient>(new MemoryCacheClient());

            //Repositories
            container.RegisterAs <CategoryServiceRepository, ICategoryServiceRepository>();
            container.RegisterAs <CustomerServiceRepository, ICustomerServiceRepository>();
            container.RegisterAs <CustomerCustomerDemoServiceRepository, ICustomerCustomerDemoServiceRepository>();
            container.RegisterAs <CustomerDemographicServiceRepository, ICustomerDemographicServiceRepository>();
            container.RegisterAs <EmployeeServiceRepository, IEmployeeServiceRepository>();
            container.RegisterAs <EmployeeTerritoryServiceRepository, IEmployeeTerritoryServiceRepository>();
            container.RegisterAs <OrderServiceRepository, IOrderServiceRepository>();
            container.RegisterAs <OrderDetailServiceRepository, IOrderDetailServiceRepository>();
            container.RegisterAs <ProductServiceRepository, IProductServiceRepository>();
            container.RegisterAs <RegionServiceRepository, IRegionServiceRepository>();
            container.RegisterAs <ShipperServiceRepository, IShipperServiceRepository>();
            container.RegisterAs <SupplierServiceRepository, ISupplierServiceRepository>();
            container.RegisterAs <TerritoryServiceRepository, ITerritoryServiceRepository>();

            //DataAccess / OrmLite
            var connectionString = ConfigurationManager.ConnectionStrings["ApiDbConnectionString"].ConnectionString;

            container.Register <IDataAccessAdapterFactory>(c => new DataAccessAdapterFactory(connectionString));
            container.Register <IDbConnectionFactory>(c => new OrmLiteConnectionFactory(connectionString, true, new SqlServerOrmLiteDialectProvider()));
        }
Esempio n. 3
0
        private void ConfigureIoC(Container container)
        {
            container.Adapter = new StructureMapContainerAdapter();

            //Register your dependencies
            container.RegisterValidators(typeof(MD5Validator).Assembly);

            ObjectFactory.Container.Inject(typeof(IChecksumGenerator), new MD5ChecksumGenerator());
            ObjectFactory.Container.Inject(typeof(IUrlValidator), new UrlValidator());
            ObjectFactory.Container.Inject(typeof(IWebContentReader), new WebContentReader());
        }
Esempio n. 4
0
        public override void Configure(Funq.Container container)
        {
            RequestBinders.Clear();

            JsConfig.EmitCamelCaseNames = true;
            JsConfig.IncludeNullValues  = true;
            JsConfig.DateHandler        = JsonDateHandler.ISO8601;

            Plugins.Add(new ValidationFeature());

            // Add custom request filter
            RequestFilters.Add(GetRequestProcessor.DeserializeJsonFromGet);

            container.Adapter = new AutofacContainerAdapter(containerProvider);
            container.RegisterValidators(typeof(GetTagRequestValidator).Assembly);
        }
Esempio n. 5
0
        public override void Configure(Funq.Container container)
        {
            ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;
            ServiceStack.Text.JsConfig.IncludeNullValues  = true;
            ServiceStack.Logging.LogManager.LogFactory    = new NLogFactory();

            Plugins.Add(new RazorFormat {
                LoadFromAssemblies = new List <Assembly> {
                    typeof(AppHost).Assembly
                }
            });
            Plugins.Add(new ValidationFeature());

            container.RegisterValidators(typeof(AppHost).Assembly);

            this.PreRequestFilters.Add((request, response) => Log.Info(request.AbsoluteUri));
            this.GlobalRequestFilters.Add((request, response, dto) => Log.Info(request));

            RewriteReturnVoidToNoContent();
        }
            public override void Configure(Funq.Container container)
            {
                //Confiture our application

                //IKernel kernel = new StandardKernel();
                //kernel.Bind<TrackedDataRepository>().ToSelf(); //similar to funq, singleton. Class resolved to itself

                //container.Adapter = new NinjectContainerAdapter(kernel);


                //Authentication configuration - iOC container
                Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                            new IAuthProvider[]
                                            { new BasicAuthProvider(),
                                              new TwitterAuthProvider(new AppSettings()) }));


                Plugins.Add(new RegistrationFeature());                 //registration for new user

                Plugins.Add(new ValidationFeature());
                container.RegisterValidators(typeof(EntryService).Assembly);                //configure validators


                Plugins.Add(new RequestLogsFeature());                 //enable request logs feature, a user with Admin privilages is needed

                Plugins.Add(new RazorFormat());

                container.Register <ICacheClient>(new MemoryCacheClient());                //cache client // can set up Redis/Azure

                //Redis container.Register<IRedisClientManager>(c => new PooledRedisClientManager(redis client path));
                //container.Register<ICacheClient>(c =>(ICacheClient)c.Resolve<IRedisClientManager>().GetCacheClient(); < resolve to cache client Redis' client.

                var userRepository = new InMemoryAuthRepository();                 //in memory auth repository

                container.Register <IUserAuthRepository>(userRepository);

                //add a user
                string hash;
                string salt;

                new SaltedHash().GetHashAndSaltString("password", out hash, out salt);
                userRepository.CreateUserAuth(new UserAuth
                {
                    Id           = 1,
                    DisplayName  = "JoeUser",
                    Email        = "*****@*****.**",
                    UserName     = "******",
                    FirstName    = "Joe",
                    LastName     = "User",
                    PasswordHash = hash,
                    salt         = salt,
                    Roles        = new List <string> {
                        RoleNames.Admin
                    }                                                                // have to have this role in order to call AssignRoles, UnAssignRoles default services
                    //Roles = new List<string> { "User" },//this is Role Authorization
                    //Permissions = new List<string> {"GetStatus"} //this is Permission Authorization
                }, "password");                 //user is created in the repository

                var dbConnectionFactory = new OrmLiteConnectionFactory(HttpContext.Current.Server.MapPath("~/App_Data/data.txtx"),
                                                                       SqlliteDialect.Provider)
                {
                    ConnectionFilter = x => new ProfiledDbConnection(x, Profiler.Current);                     //enables any calls through ORM to be profiled.
                };


                container.Register <IDbConnectionFactory>(dbConnectionFactory)        //anywhere you want to use dbConnectionFactory, Funq will automatically populate this

                container.RegisterAutoWired <TrackedDataRepository>();                //Autowiring services and auto inject any public properties, SINGLETON by default
                //You can set the scope with ReusedWIthin

                LogManager.LogFactory = new EventLogFactory("ProteinTracker.Logging", "Application");
                //name					//source

                SetConfig(new EndpointHostConfig {
                    DebugMode = true
                });

                container.Register <IRedisClientsManager>(new PooledRedisClientManager("localhost:6379"));               //default redis port
                var mqService = new RedisMqServer(container.Resolve <IRedisClientsManager>());


                mqService.RegisterHandler <Entry>(ServiceController.ExecuteMessage);                //executs the service that handles the Entry message
                //listens for Entry messages

                mqSerice.Start();                 //start listening for messages
            }
Esempio n. 7
0
        public override void Configure(Funq.Container container)
        {
            JsConfig.EmitCamelCaseNames = true;
            JsConfig.IncludeNullValues  = true;
            JsConfig.DateHandler        = JsonDateHandler.ISO8601;

            LogManager.LogFactory = new ConsoleLogFactory();

            SetConfig(new EndpointHostConfig
            {
                WsdlServiceNamespace = "",
                AllowJsonpRequests   = true,
                DebugMode            = true,
                EnableFeatures       = Feature.All.Remove(GetDisabledFeatures()),
                CustomHttpHandlers   =
                {
                    // Use the CmsRazorHandler to add theming capabilities
                    { HttpStatusCode.NotFound, new CmsRazorHandler("/notfound") }
                }
            });

            //Authentication (see: https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/AuthTests.cs)
            Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                        new IAuthProvider[] {
                new BasicAuthProvider(),   //Sign-in with Basic Auth
            })
            {
                HtmlRedirect = null     /* prevent redirect to login page, make the user login using basic auth prompt */
            });
            userRepository = new InMemoryAuthRepository();
            container.Register <IUserAuthRepository>(userRepository);
            CreateUser(userRepository, 1, UserName, "DisplayName", null, Password);

            //Enable the validation feature and scan the service assembly for validators
            Plugins.Add(new ValidationFeature());
            container.RegisterValidators(typeof(Services.CategoryService).Assembly);

            //Razor (use CmsRazorFormat to add theming capabilities)
            Plugins.Add(new CmsRazorFormat());

            //Caching
            container.Register <ICacheClient>(new MemoryCacheClient());

            //Entity Repositories
            container.RegisterAs <CategoryServiceRepository, ICategoryServiceRepository>();
            container.RegisterAs <CustomerServiceRepository, ICustomerServiceRepository>();
            container.RegisterAs <CustomerCustomerDemoServiceRepository, ICustomerCustomerDemoServiceRepository>();
            container.RegisterAs <CustomerDemographicServiceRepository, ICustomerDemographicServiceRepository>();
            container.RegisterAs <EmployeeServiceRepository, IEmployeeServiceRepository>();
            container.RegisterAs <EmployeeTerritoryServiceRepository, IEmployeeTerritoryServiceRepository>();
            container.RegisterAs <OrderServiceRepository, IOrderServiceRepository>();
            container.RegisterAs <OrderDetailServiceRepository, IOrderDetailServiceRepository>();
            container.RegisterAs <ProductServiceRepository, IProductServiceRepository>();
            container.RegisterAs <RegionServiceRepository, IRegionServiceRepository>();
            container.RegisterAs <ShipperServiceRepository, IShipperServiceRepository>();
            container.RegisterAs <SupplierServiceRepository, ISupplierServiceRepository>();
            container.RegisterAs <TerritoryServiceRepository, ITerritoryServiceRepository>();

            //TypedList Repositories
            container.RegisterAs <TLSR.EmployeesByRegionAndTerritoryTypedListServiceRepository, TLSI.IEmployeesByRegionAndTerritoryTypedListServiceRepository>();

            //TypedView Repositories
            container.RegisterAs <TVSR.AlphabeticalListOfProductsTypedViewServiceRepository, TVSI.IAlphabeticalListOfProductsTypedViewServiceRepository>();
            container.RegisterAs <TVSR.CategorySalesFor1997TypedViewServiceRepository, TVSI.ICategorySalesFor1997TypedViewServiceRepository>();
            container.RegisterAs <TVSR.CurrentProductListTypedViewServiceRepository, TVSI.ICurrentProductListTypedViewServiceRepository>();
            container.RegisterAs <TVSR.CustomerAndSuppliersByCityTypedViewServiceRepository, TVSI.ICustomerAndSuppliersByCityTypedViewServiceRepository>();
            container.RegisterAs <TVSR.InvoicesTypedViewServiceRepository, TVSI.IInvoicesTypedViewServiceRepository>();
            container.RegisterAs <TVSR.OrderDetailsExtendedTypedViewServiceRepository, TVSI.IOrderDetailsExtendedTypedViewServiceRepository>();
            container.RegisterAs <TVSR.OrdersQryTypedViewServiceRepository, TVSI.IOrdersQryTypedViewServiceRepository>();
            container.RegisterAs <TVSR.OrderSubtotalTypedViewServiceRepository, TVSI.IOrderSubtotalTypedViewServiceRepository>();
            container.RegisterAs <TVSR.ProductsAboveAveragePriceTypedViewServiceRepository, TVSI.IProductsAboveAveragePriceTypedViewServiceRepository>();
            container.RegisterAs <TVSR.ProductSalesFor1997TypedViewServiceRepository, TVSI.IProductSalesFor1997TypedViewServiceRepository>();
            container.RegisterAs <TVSR.ProductsByCategoryTypedViewServiceRepository, TVSI.IProductsByCategoryTypedViewServiceRepository>();
            container.RegisterAs <TVSR.QuarterlyOrderTypedViewServiceRepository, TVSI.IQuarterlyOrderTypedViewServiceRepository>();
            container.RegisterAs <TVSR.SalesByCategoryTypedViewServiceRepository, TVSI.ISalesByCategoryTypedViewServiceRepository>();
            container.RegisterAs <TVSR.SalesTotalsByAmountTypedViewServiceRepository, TVSI.ISalesTotalsByAmountTypedViewServiceRepository>();
            container.RegisterAs <TVSR.SummaryOfSalesByQuarterTypedViewServiceRepository, TVSI.ISummaryOfSalesByQuarterTypedViewServiceRepository>();
            container.RegisterAs <TVSR.SummaryOfSalesByYearTypedViewServiceRepository, TVSI.ISummaryOfSalesByYearTypedViewServiceRepository>();

            //DataAccess / OrmLite
            var connectionString = ConfigurationManager.ConnectionStrings["ApiDbConnectionString"].ConnectionString;

            container.Register <IDataAccessAdapterFactory>(c => new DataAccessAdapterFactory(connectionString));
            container.Register <IDbConnectionFactory>(c => new OrmLiteConnectionFactory(connectionString, true, new SqlServerOrmLiteDialectProvider()));

            //DataAccess Caching
            CacheController.RegisterCache(string.Empty /* connectionString */, new ResultsetCache(5 * 60 /* will purge the cache every 5 minutes */));
        }
Esempio n. 8
0
        public override void Configure(Funq.Container container)
        {
            //Set JSON web services to return idiomatic JSON camelCase properties
            ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;

            //https://github.com/wordnik/swagger-core/wiki
            //Document your code and expose it to the world
            Plugins.Add(new SwaggerFeature());

            //Registers authorization service and endpoints /auth and /auth{provider}
            Plugins.Add(new AuthFeature(
                            () => new AuthUserSession(),
                            new IAuthProvider[] { new CredentialsAuthProvider() }
                            )
            {
                HtmlRedirect = null
            });

            //Registers registartion service and endpoints /register, /assignroles, /unassignroles
            Plugins.Add(new RegistrationFeature());
            this.RegisterAs <MyRegistrationValidator, IValidator <Registration> >();

            Plugins.Add(new ValidationFeature());
            container.RegisterValidators(typeof(CreateOrderValidator).Assembly);

            var dataFilePath = AppDomain.CurrentDomain.GetData("DataDirectory").ToString() + "\\data.db";

            container.Register <IDbConnectionFactory>(new OrmLiteConnectionFactory(dataFilePath, SqliteDialect.Provider));

            var userRep = new OrmLiteAuthRepository(container.Resolve <IDbConnectionFactory>());

            container.Register <IUserAuthRepository>(userRep);
            var redisCon = ConfigurationManager.AppSettings["redisUrl"].ToString();

            container.Register <IRedisClientsManager>(new PooledRedisClientManager(20, 60, redisCon));
            container.Register <ICacheClient>(c => (ICacheClient)c.Resolve <IRedisClientsManager>().GetCacheClient());

            //Set MVC to use the same Funq IOC as ServiceStack
            ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container));

            //https://github.com/ServiceStack/ServiceStack.Redis/wiki/RedisPubSub
            //start threads that subscribe to Redis channels for Pub/Sub
            new OrderSubscribers(container).StartSubscriberThreads();
            new FulfillmentSubscribers(container).StartSubscriberThreads();

            //https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization#userauth-persistence---the-iuserauthrepository
            //Use ServiceStacks authentication/authorization persistence
            userRep.CreateMissingTables(); //Create missing Auth

            //Re-Create Tables for the demo
            using (var con = AppHostBase.Resolve <IDbConnectionFactory>().OpenDbConnection())
            {
                con.CreateTable <Order>(true);
                con.CreateTable <Fulfillment>(true);
            }

            //clear redis
            using (var redis = AppHostBase.Resolve <IRedisClientsManager>().GetClient())
            {
            }
            //Create dummy user accounts (TestUser/Password)
            foreach (var user in DummyUserAccounts.GetDummyAccounts())
            {
                if (userRep.GetUserAuthByUserName(user.UserName) == null)
                {
                    userRep.CreateUserAuth(new UserAuth {
                        UserName = user.UserName
                    }, user.Password);
                }
            }
        }
Esempio n. 9
0
            public override void Configure(Funq.Container container)
            {
                IocShared.Configure(this);

                this.PreRequestFilters.Add((req, res) =>
                {
                    req.Items["_DataSetAtPreRequestFilters"] = true;
                });

                this.GlobalRequestFilters.Add((req, res, dto) =>
                {
                    req.Items["_DataSetAtRequestFilters"] = true;

                    if (dto is RequestFilter requestFilter)
                    {
                        res.StatusCode = requestFilter.StatusCode;
                        if (!requestFilter.HeaderName.IsNullOrEmpty())
                        {
                            res.AddHeader(requestFilter.HeaderName, requestFilter.HeaderValue);
                        }
                        res.Close();
                    }

                    if (dto is IRequiresSession secureRequests)
                    {
                        res.ReturnAuthRequired();
                    }
                });

                Plugins.Add(new SoapFormat());
                Plugins.Add(new MiniProfilerFeature());

                container.Register <IDbConnectionFactory>(c =>
                                                          new OrmLiteConnectionFactory(
                                                              "~/App_Data/db.sqlite".MapHostAbsolutePath(),
                                                              SqliteDialect.Provider)
                {
                    ConnectionFilter = x => new ProfiledDbConnection(x, Profiler.Current)
                });

                container.Register <ICacheClient>(new MemoryCacheClient());
                //container.Register<ICacheClient>(new BasicRedisClientManager());

                ConfigureAuth(container);

                //container.Register<ISessionFactory>(
                //    c => new SessionFactory(c.Resolve<ICacheClient>()));

                var dbFactory = container.Resolve <IDbConnectionFactory>();

                using (var db = dbFactory.Open())
                    db.DropAndCreateTable <Movie>();

                ModelConfig <Movie> .Id(x => x.Title);

                Routes
                .Add <Movies>("/custom-movies", "GET, OPTIONS")
                .Add <Movies>("/custom-movies/genres/{Genre}")
                .Add <Movie>("/custom-movies", "POST,PUT")
                .Add <Movie>("/custom-movies/{Id}")
                .Add <MqHostStats>("/mqstats");

                container.Register <IRedisClientsManager>(c => new RedisManagerPool());

                Plugins.Add(new TemplatePagesFeature());

                Plugins.Add(new ValidationFeature());
                Plugins.Add(new SessionFeature());
                Plugins.Add(new ProtoBufFormat());
                Plugins.Add(new RequestLogsFeature
                {
                    //RequestLogger = new RedisRequestLogger(container.Resolve<IRedisClientsManager>())
                    RequestLogger = new CsvRequestLogger(),
                });
                Plugins.Add(new SwaggerFeature
                {
                    //UseBootstrapTheme = true
                    OperationFilter = x => x.Consumes = x.Produces = new[] { MimeTypes.Json, MimeTypes.Xml }.ToList(),
                    RouteSummary    =
                    {
                        { "/swaggerexamples", "Swagger Examples Summary" }
                    }
                });
                Plugins.Add(new PostmanFeature());
                Plugins.Add(new CorsFeature());
                Plugins.Add(new AutoQueryFeature {
                    MaxLimit = 100
                });
                Plugins.Add(new AdminFeature());

                container.RegisterValidators(typeof(CustomersValidator).Assembly);

                typeof(ResponseStatus)
                .AddAttributes(new DescriptionAttribute("This is the Response Status!"));

                typeof(ResponseStatus)
                .GetProperty("Message")
                .AddAttributes(new DescriptionAttribute("A human friendly error message"));

                if (StartMqHost)
                {
                    var redisManager = new BasicRedisClientManager();
                    var mqHost       = new RedisMqServer(redisManager);
                    mqHost.RegisterHandler <Reverse>(ExecuteMessage);
                    mqHost.Start();
                    container.Register((IMessageService)mqHost);
                }
            }