コード例 #1
0
        /// <summary>
        /// Integrates Unity when the application starts.
        /// </summary>
        public static void Start()
        {
            var container = UnityConfig.GetConfiguredContainer();

            //Add Unity extension for mvc sitemap dependency injection
            container.AddNewExtension <MvcSiteMapProviderContainerExtension>();

            FilterProviders.Providers.Remove(FilterProviders.Providers.OfType <FilterAttributeFilterProvider>().First());
            FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));

            var dependencyResolver = new UnityDependencyResolver(container);
            var locatorProvider    = new UnityDependencyResolverServiceLocatorProvider(dependencyResolver);

            ServiceLocator.SetLocatorProvider(() => locatorProvider);
            DependencyResolver.SetResolver(dependencyResolver);

            GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);

            if (!AzureCommonHelper.IsAzureEnvironment() && AppConfigConfiguration.Instance.Setup.IsCompleted)
            {
                SchedulerHost.CreateScheduler();
            }
        }
コード例 #2
0
        //[Fact]
        public void ef_memory_leak()
        {
            // this call causes memory leak for every entity framework request after
            var isAzure = AzureCommonHelper.IsAzureEnvironment();

            //CloudConfigurationManager.GetSetting("SchoolContext");

            Database.SetInitializer(new MySampleInitialize());

            new SchoolContext().Database.Initialize(false);
            for (int index = 1; index < 500; index++)
            {
                var db2 = new SchoolContext();
                var all = db2.Students.ToArray();
                db2.Dispose();
            }

            for (int index = 1; index < 500; index++)
            {
                var db2 = new EFAppConfigRepository();
                var all = db2.Localizations.ToArray();
                db2.Dispose();
            }
        }
コード例 #3
0
        /// <summary>Registers the type mappings with the Unity container.</summary>
        /// <param name="container">The unity container to configure.</param>
        /// <remarks>There is no need to register concrete types such as controllers or API controllers (unless you want to
        /// change the defaults), as Unity allows resolving a concrete type even if it was not previously registered.</remarks>
        public static void RegisterTypes(IUnityContainer container)
        {
            // NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
            // container.LoadConfiguration();

            #region Common Settings for Web and Services

            // this section is common for both web application and services application and should be kept identical
            var isAzure = AzureCommonHelper.IsAzureEnvironment();

            container.RegisterType <IKnownSerializationTypes, CatalogEntityFactory>("catalog",
                                                                                    new ContainerControlledLifetimeManager
                                                                                        ());

            //container.RegisterType<IKnowSerializationTypes, OrderEntityFactory>("order", new ContainerControlledLifetimeManager(), null);
            container.RegisterInstance <IConsumerFactory>(new DomainAssemblyScannerConsumerFactory(container));
            container.RegisterType <IKnownSerializationTypes, DomainAssemblyScannerConsumerFactory>("scaned",
                                                                                                    new ContainerControlledLifetimeManager
                                                                                                        (),
                                                                                                    new InjectionConstructor
                                                                                                        (container));



            container.RegisterType <IConsumerFactory, DomainAssemblyScannerConsumerFactory>();
            container.RegisterType <ISystemObserver, NullSystemObserver>();
            container.RegisterType <IEngineProcess, SingleThreadConsumingProcess>();
            container.RegisterType <IMessageSerializer, DataContractMessageSerializer>();
            if (isAzure)
            {
                container.RegisterType <IQueueWriter, AzureQueueWriter>();
                container.RegisterType <IQueueReader, AzureQueueReader>();
            }
            else
            {
                container.RegisterType <IQueueWriter, InMemoryQueueWriter>();
                container.RegisterType <IQueueReader, InMemoryQueueReader>();
            }
            container.RegisterType <IMessageSender, DefaultMessageSender>(new ContainerControlledLifetimeManager());
            container.RegisterType <ICurrencyService, CurrencyService>(new ContainerControlledLifetimeManager());

            //container.RegisterType<ICacheProvider, InMemCachingProvider>();
            container.RegisterType <ICacheRepository, HttpCacheRepository>();
            container.RegisterType <IOperationLogRepository, OperationLogContext>(new PerRequestLifetimeManager());
            container.RegisterType <ILogOperationFactory, LogOperationFactory>();

            //Register Sequences
            container.RegisterType <ISequenceService, SequenceService>();

            //Register Template and Email service
            container.RegisterType <ITemplateService, TemplateService>();

            if (isAzure)
            {
                container.RegisterType <IEmailService, AzureEmailService>();
            }
            else
            {
                container.RegisterType <IEmailService, NetEmailService>();
            }

            container.RegisterType <ICatalogOutlineBuilder, CatalogOutlineBuilder>();

            #region Interceptors

            // register interceptors
            container.RegisterType <IInterceptor, AuditChangeInterceptor>("audit");
            container.RegisterType <IInterceptor, LogInterceptor>("log");
            container.RegisterType <IInterceptor, EntityEventInterceptor>("events");

            #endregion

            #region Marketing

            container.RegisterType <IMarketingRepository, EFMarketingRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IMarketingEntityFactory, MarketingEntityFactory>();
            container.RegisterType <IPromotionUsageProvider, PromotionUsageProvider>();
            container.RegisterType <IPromotionEntryPopulate, PromotionEntryPopulate>();

            //Register prmotion evaluation policies
            container.RegisterType <IEvaluationPolicy, GlobalExclusivityPolicy>("global");
            container.RegisterType <IEvaluationPolicy, GroupExclusivityPolicy>("group");
            container.RegisterType <IEvaluationPolicy, CartSubtotalRewardCombinePolicy>("cart");
            container.RegisterType <IEvaluationPolicy, ShipmentRewardCombinePolicy>("shipment");


            container.RegisterType <IPromotionEvaluator, DefaultPromotionEvaluator>();

            #endregion

            #region Search

            var searchConnection = new SearchConnection(ConnectionHelper.GetConnectionString("SearchConnectionString"));
            container.RegisterInstance <ISearchConnection>(searchConnection);
            container.RegisterType <ISearchService, SearchService>(new HierarchicalLifetimeManager());
            container.RegisterType <ISearchIndexController, SearchIndexController>();
            container.RegisterType <IBuildSettingsRepository, EFSearchRepository>(new PerRequestLifetimeManager());
            container.RegisterType <ISearchEntityFactory, SearchEntityFactory>(new ContainerControlledLifetimeManager());
            container.RegisterType <ISearchIndexBuilder, CatalogItemIndexBuilder>("catalogitem");

            // If provider specified as lucene, use lucene libraries, otherwise use default, which is elastic search
            if (string.Equals(searchConnection.Provider, SearchProviders.Lucene.ToString(), StringComparison.OrdinalIgnoreCase))
            {
                // Lucene Search implementation
                container.RegisterType <ISearchProvider, LuceneSearchProvider>();
                container.RegisterType <ISearchQueryBuilder, LuceneSearchQueryBuilder>();
            }
            else if (string.Equals(searchConnection.Provider, SearchProviders.AzureSearch.ToString(), StringComparison.OrdinalIgnoreCase))
            {
                // Azure Search implementation
                container.RegisterType <ISearchProvider, AzureSearchProvider>();
                container.RegisterType <ISearchQueryBuilder, AzureSearchQueryBuilder>();
            }
            else
            {
                container.RegisterType <ISearchProvider, ElasticSearchProvider>();
                container.RegisterType <ISearchQueryBuilder, ElasticSearchQueryBuilder>();
            }
            #endregion

            #region Assets

            container.RegisterType <IAssetEntityFactory, AssetEntityFactory>();

            // using azure assets
            if (isAzure)
            {
                container.RegisterType <IAssetRepository, AzureBlobAssetRepository>();
                container.RegisterType <IBlobStorageProvider, AzureBlobAssetRepository>();
                container.RegisterType <IAssetUrl, AzureBlobAssetRepository>();
            }
            else
            {
                // using local storage assets
                container.RegisterType <IAssetRepository, FileSystemBlobAssetRepository>();
                container.RegisterType <IBlobStorageProvider, FileSystemBlobAssetRepository>();
                container.RegisterType <IAssetUrl, FileSystemAssetUrl>();
            }

            container.RegisterType <IAssetService, AssetService>();
            #endregion

            #region Catalog
            container.RegisterType <ICatalogEntityFactory, CatalogEntityFactory>(new ContainerControlledLifetimeManager());

            container.RegisterType <ICatalogRepository, EFCatalogRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IPricelistRepository, EFCatalogRepository>(new PerRequestLifetimeManager());
            container.RegisterType <ICatalogService, CatalogService>();
            container.RegisterType <IPriceListAssignmentEvaluator, PriceListAssignmentEvaluator>();
            container.RegisterType <IPriceListAssignmentEvaluationContext, PriceListAssignmentEvaluationContext>();

            container.RegisterType <IImportJobEntityFactory, ImportJobEntityFactory>(
                new ContainerControlledLifetimeManager());
            container.RegisterType <IImportRepository, EFImportingRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IImportService, ImportService>();
            #endregion

            #region Customer

            container.RegisterType <ICustomerEntityFactory, CustomerEntityFactory>(
                new ContainerControlledLifetimeManager());

            container.RegisterType <ICustomerRepository, EFCustomerRepository>(new PerRequestLifetimeManager());
            container.RegisterType <ICustomerSessionService, CustomerSessionService>();

            #endregion

            #region Inventory

            container.RegisterType <IInventoryEntityFactory, InventoryEntityFactory>(
                new ContainerControlledLifetimeManager());
            container.RegisterType <IInventoryRepository, EFInventoryRepository>(new PerRequestLifetimeManager());

            #endregion

            #region Order

            container.RegisterType <IOrderEntityFactory, OrderEntityFactory>(new ContainerControlledLifetimeManager());

            var activityProvider = WorkflowConfiguration.Instance.DefaultActivityProvider;
            var workflowService  = new WFWorkflowService(activityProvider);
            container.RegisterInstance <IWorkflowService>(workflowService);
            container.RegisterType <IOrderStateController, OrderStateController>();

            container.RegisterType <IOrderRepository, EFOrderRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IShippingRepository, EFOrderRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IPaymentMethodRepository, EFOrderRepository>(new PerRequestLifetimeManager());
            container.RegisterType <ITaxRepository, EFOrderRepository>(new PerRequestLifetimeManager());

            container.RegisterType <ICountryRepository, EFOrderRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IOrderService, OrderService>();

            #endregion

            #region Review

            container.RegisterType <IReviewEntityFactory, ReviewEntityFactory>(new ContainerControlledLifetimeManager());
            container.RegisterType <IReviewRepository, EFReviewRepository>(new PerRequestLifetimeManager());

            #endregion

            #region Security

            container.RegisterType <ISecurityEntityFactory, SecurityEntityFactory>(
                new ContainerControlledLifetimeManager());
            container.RegisterType <ISecurityRepository, EFSecurityRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IUserSecurity, WebUserSecurity>();
            container.RegisterType <IAuthenticationService, AuthenticationService>();
            container.RegisterType <ISecurityService, SecurityService>();
            container.RegisterType <IOAuthWebSecurity, OAuthWebSecurityWrapper>();

            #endregion

            #region Store

            container.RegisterType <IStoreEntityFactory, StoreEntityFactory>(new ContainerControlledLifetimeManager());

            container.RegisterType <IStoreService, StoreService>();
            container.RegisterType <IStoreRepository, EFStoreRepository>(new PerRequestLifetimeManager());

            #endregion

            #region Reporting

            container.RegisterType <IReportingService, ReportingService>();
            #endregion

            #endregion

            #region MVC Helpers

            container.RegisterType <MarketingHelper>();
            container.RegisterType <PriceListClient>();
            container.RegisterType <StoreClient>();
            container.RegisterType <CatalogClient>();
            container.RegisterType <UserClient>();
            container.RegisterType <ShippingClient>();
            container.RegisterType <PromotionClient>();
            container.RegisterType <DynamicContentClient>();
            container.RegisterType <CountryClient>();
            container.RegisterType <OrderClient>();
            container.RegisterType <DisplayTemplateClient>();
            container.RegisterType <SettingsClient>();
            container.RegisterType <SequencesClient>();
            container.RegisterType <SeoKeywordClient>(new PerRequestLifetimeManager());
            container.RegisterType <ReviewClient>();
            container.RegisterType <IPaymentOption, CreditCardOption>("creditcard");
            container.RegisterType <ISearchFilterService, StoreSearchFilterService>(new PerRequestLifetimeManager());

            #endregion

            #region DynamicContent

            container.RegisterType <IDynamicContentService, DynamicContentService>();
            container.RegisterType <IDynamicContentRepository, EFDynamicContentRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IDynamicContentEvaluator, DynamicContentEvaluator>();

            #endregion

            #region AppConfig

            container.RegisterType <IAppConfigRepository, EFAppConfigRepository>(new PerRequestLifetimeManager());
            container.RegisterType <IAppConfigEntityFactory, AppConfigEntityFactory>(new ContainerControlledLifetimeManager());

            #endregion

            #region DisplayTemplates

            container.RegisterType <IDisplayTemplatesService, DisplayTemplatesService>();
            container.RegisterType <IDisplayTemplateEvaluator, DisplayTemplateEvaluator>();

            #endregion

            #region Events

            // Register event listeners
            container.RegisterType <IEntityEventListener, OrderChangeEventListener>("order");
            container.RegisterType <IEntityEventListener, PublicReplyEventListener>("customer");
            container.RegisterType <IEntityEventListener, CaseChangeEventListener>("customer");
            container.RegisterType <IEntityEventListener, ReviewApprovedEventListener>("review");
            container.RegisterType <IEntityEventContext, EntityEventContext>(new PerRequestLifetimeManager());

            #endregion

            #region Jobs

            container.RegisterType <GenerateSearchIndexWork>();
            container.RegisterType <ProcessOrderStatusWork>();
            container.RegisterType <ProcessSearchIndexWork>();

            #endregion

            #region Globalization

            //For using database resources
            container.RegisterType <IElementRepository, DatabaseElementRepository>(new PerRequestLifetimeManager());
            //For using Local Resources
            //container.RegisterInstance<IElementRepository>(new CacheElementRepository(new XmlElementRepository()));

            #endregion

            #region OutputCache

            container.RegisterType <IKeyBuilder, KeyBuilder>(new PerRequestLifetimeManager());
            container.RegisterType <IKeyGenerator, KeyGenerator>(new PerRequestLifetimeManager());
            container.RegisterType <IDonutHoleFiller, DonutHoleFiller>(new PerRequestLifetimeManager());
            container.RegisterType <ICacheHeadersHelper, CacheHeadersHelper>(new PerRequestLifetimeManager());
            container.RegisterType <ICacheSettingsManager, CacheSettingsManager>(new PerRequestLifetimeManager());
            container.RegisterType <IReadWriteOutputCacheManager, OutputCacheManager>(new PerRequestLifetimeManager());
            container.RegisterInstance <IActionSettingsSerialiser>(new EncryptingActionSettingsSerialiser(new ActionSettingsSerialiser(), new Encryptor()));
            container.RegisterType <ICacheService, CacheService>();

            #endregion

            container.RegisterInstance(container);
        }
コード例 #4
0
 public void Can_detect_azure_runtime()
 {
     var isValid = AzureCommonHelper.IsAzureEnvironment();
 }