public static void RegisterDependencies() { var builder = new ContainerBuilder(); #region MVC builder.RegisterFilterProvider(); builder.RegisterControllers(typeof(Controllers.HomeController).Assembly); builder.RegisterModule <AutofacWebTypesModule>(); #endregion #region AppConfigs builder .Register(c => new AppConfigLoader()) .AsSelf(); builder .Register(c => new AppConfigCache( appConfigLoader: c.Resolve <AppConfigLoader>())) .AsSelf() .SingleInstance() .OnActivating(c => c.Instance.ResetCache()); builder .Register(c => new AppConfigProvider( appConfigCache: c.Resolve <AppConfigCache>())) .AsSelf(); builder .Register(c => new AppConfigValueConverter()) .AsSelf(); #endregion #region Caching builder .Register(c => new CachedShoppingCartProvider( cachedObjectProvider: c.Resolve <CachedObjectProvider <ShoppingCart, ShoppingCartCacheContext> >())) .SingleInstance() .As <ICachedShoppingCartProvider>(); builder .Register(c => new ShoppingCartCachedObjectContextBuilder( appConfigValueConverter: c.Resolve <AppConfigValueConverter>())) .SingleInstance() .As <ICachedObjectContextBuilder <ShoppingCart, ShoppingCartCacheContext> >(); builder .Register(c => new CachedShippingMethodCollectionProvider( cachedObjectProvider: c.Resolve <CachedObjectProvider <ShippingMethodCollection, ShippingMethodCollectionCacheContext> >())) .SingleInstance() .As <ICachedShippingMethodCollectionProvider>(); builder .Register(c => new ShippingMethodCollectionCachedObjectContextBuilder( shippingMethodCollectionProvider: c.Resolve <IShippingMethodCollectionProvider>(), appConfigValueConverter: c.Resolve <AppConfigValueConverter>())) .SingleInstance() .As <ICachedObjectContextBuilder <ShippingMethodCollection, ShippingMethodCollectionCacheContext> >(); builder .RegisterGeneric(typeof(CachedObjectProvider <,>)) .SingleInstance() .AsSelf(); builder .Register(c => new CacheProvider()) .SingleInstance() .AsSelf(); builder .Register(c => new HashProvider()) .SingleInstance() .AsSelf(); builder .Register(c => new CacheDependencyEvaluator( cacheProvider: c.Resolve <CacheProvider>(), dependencyStateProvider: c.Resolve <DependencyStateProvider>())) .SingleInstance() .AsSelf(); builder .Register(c => new DependencyStateProvider( managers: c.Resolve <IEnumerable <IDependencyStateManager> >())) .SingleInstance() .AsSelf(); builder .Register(c => new AppConfigDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), hashProvider: c.Resolve <HashProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); builder .Register(c => new AppConfigValueDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), hashProvider: c.Resolve <HashProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); builder .Register(c => new QueryDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), hashProvider: c.Resolve <HashProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); builder .Register(c => new CacheEntryDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), cacheProvider: c.Resolve <CacheProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); builder .Register(c => new CheckoutShippingSelectionDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), checkoutSelectionProvider: c.Resolve <ICheckoutSelectionProvider>(), persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>(), paymentMethodInfoProvider: c.Resolve <IPaymentMethodInfoProvider>(), hashProvider: c.Resolve <HashProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); #endregion #region Checkout #region Checkout - Pre-Checkout Rules builder .Register(c => new OffsiteAddressRestrictionPreCheckoutRule( noticeProvider: c.Resolve <NoticeProvider>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new OffsiteAddressButInvalidPaymentMethodPreCheckoutRule()) .As <IPreCheckoutRule>(); builder .Register(c => new InventoryTrimmedPreCheckoutRule( cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>(), noticeProvider: c.Resolve <NoticeProvider>(), cartActionProvider: c.Resolve <CartActionProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new CartAgePreCheckoutRule( cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>(), cartActionProvider: c.Resolve <CartActionProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new PaymentMethodPreCheckoutRule( cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new ShippingSelectionPreCheckoutRule( cachedShippingMethodCollectionProvider: c.Resolve <ICachedShippingMethodCollectionProvider>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>(), shippingMethodCartItemApplicator: c.Resolve <IShippingMethodCartItemApplicator>(), effectiveShippingAddressProvider: c.Resolve <IEffectiveShippingAddressProvider>())) .As <IPreCheckoutRule>(); #endregion #region Checkout - Payment Method Cleanups builder .Register(c => new AmazonAppliedPaymentMethodCleanup( persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>())) .As <IAppliedPaymentMethodCleanup>(); builder .Register(c => new PayPalExpressAppliedPaymentMethodCleanup( persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>())) .As <IAppliedPaymentMethodCleanup>(); #endregion builder .Register(c => new AddressHeaderProvider()) .AsSelf(); builder .Register(c => new CartContextProvider( checkoutRules: c.Resolve <IEnumerable <IPreCheckoutRule> >(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <ICartContextProvider>(); builder .Register(c => new CheckoutSelectionProvider( persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>())) .As <ICheckoutSelectionProvider>(); builder .Register(c => new CheckoutEngine( paymentMethodInfoProvider: c.Resolve <IPaymentMethodInfoProvider>(), guards: c.Resolve <Guards>(), transitionBuilder: c.Resolve <TransitionBuilder>())) .AsSelf(); builder .Register(c => new TransitionBuilder( guards: c.Resolve <Guards>())) .AsSelf(); builder .Register(c => new Guards( cachedShippingMethodCollectionProvider: c.Resolve <ICachedShippingMethodCollectionProvider>(), giftCardManager: c.Resolve <GiftCardManager>(), appConfigProvider: c.Resolve <AppConfigProvider>(), checkoutAccountStatusProvider: c.Resolve <ICheckoutAccountStatusProvider>())) .AsSelf(); builder .Register(c => new PersistedCheckoutContextProvider()) .As <IPersistedCheckoutContextProvider>(); builder .Register(c => new CreditCardValidationProvider( creditCardTypeProvider: c.Resolve <CreditCardTypeProvider>())) .As <ICreditCardValidationProvider>(); builder .Register(c => new PaymentOptionProvider( urlHelper: c.Resolve <UrlHelper>(), paymentMethodInfoProvider: c.Resolve <IPaymentMethodInfoProvider>())) .As <IPaymentOptionProvider>(); builder .Register(c => new PaymentMethodInfoProvider()) .As <IPaymentMethodInfoProvider>(); builder .Register(c => new AuthorizeNetWalletProvider()) .As <IWalletProvider>(); builder .Register(c => new ShippingMethodCartItemApplicator()) .As <IShippingMethodCartItemApplicator>(); builder .Register(c => new EffectiveShippingAddressProvider( persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>())) .As <IEffectiveShippingAddressProvider>(); builder .Register(c => new CheckoutConfigurationProvider()) .As <ICheckoutConfigurationProvider>(); builder .Register(c => new CheckoutAccountStatusProvider( appConfigProvider: c.Resolve <AppConfigProvider>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <ICheckoutAccountStatusProvider>(); #endregion builder .Register(c => new ShippingMethodCollectionProvider()) .As <IShippingMethodCollectionProvider>(); builder .Register(c => new CaptchaStorageService()) .AsSelf(); builder .Register(c => new AddressControllerHelper( addressValidationProviderFactory: c.Resolve <IAddressValidationProviderFactory>(), addressViewModelConverter: c.Resolve <AddressViewModelConverter>())) .AsSelf(); builder .Register(c => new AddressViewModelConverter()) .AsSelf(); builder .Register(c => new AddressSelectListBuilder()) .AsSelf(); builder .Register(c => new CreditCardSelectListBuilder()) .AsSelf(); builder .Register(c => new AddressValidationProviderFactory()) .As <IAddressValidationProviderFactory>(); builder .Register(c => new NoticeProvider( noticeStorageProvider: c.Resolve <INoticeStorageProvider>())) .AsSelf(); builder .Register(c => new AccountSettings()) .AsSelf(); builder .Register(c => new AccountControllerHelper(c.Resolve <AccountSettings>())) .AsSelf(); builder .Register(c => AppLogic.AppConfigBool("UseLegacySENameProvider") ? (ISearchEngineNameProvider) new LegacySearchEngineNameProvider(new HttpContextWrapper(HttpContext.Current)) : (ISearchEngineNameProvider) new Utf8SearchEngineNameProvider(new HttpContextWrapper(HttpContext.Current))) .As <ISearchEngineNameProvider>() .InstancePerRequest(); builder .Register(c => new CartActionProvider( urlHelper: c.Resolve <UrlHelper>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .AsSelf(); builder .Register(c => new RestrictedQuantityProvider()) .AsSelf(); builder .Register(c => new CookieNoticeStorageProvider(new HttpContextWrapper(HttpContext.Current))) .As <INoticeStorageProvider>() .InstancePerRequest(); builder .Register(c => new ClaimsIdentityProvider()) .As <IClaimsIdentityProvider>(); builder .Register(c => new GiftCardManager()) .AsSelf(); builder .Register(c => new CreditCardTypeProvider()) .AsSelf(); builder .Register(c => new SkinProvider()) .As <ISkinProvider>() .AsSelf(); #region Filters builder.RegisterFilterProvider(); builder .Register(c => new CustomerRoleVerificationFilterAttribute(c.Resolve <IClaimsIdentityProvider>())) .AsAuthenticationFilterFor <Controller>(); builder .Register(c => new SiteDisclaimerFilterAttribute()) .AsAuthorizationFilterFor <Controller>(); builder .Register(c => new IpBlacklistFilterAttribute()) .AsAuthorizationFilterFor <Controller>(); builder .Register(c => new MaintenanceFilterAttribute()) .AsAuthorizationFilterFor <Controller>(); builder .Register(c => new SkinIdRouteDataFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new ReferrerCookieFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new CustomerQueryStringFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new UpdateCustomerLastIpAddressFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new SecureAccessFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new ContentSecurityPolicyFilterAttribute()) .AsActionFilterFor <Controller>(); #endregion builder .Register(c => new UspsPostalCodeLookupProvider( appConfigProvider: c.Resolve <AppConfigProvider>())) .As <IPostalCodeLookupProvider>(); builder .Register(c => AmazonPaymentsConfiguration.CreateDefaultConfiguration()) .AsSelf(); builder .Register(c => new HttpClient()) .AsSelf(); builder .Register(c => new AmazonPaymentsApiProvider( configuration: c.Resolve <AmazonPaymentsConfiguration>(), httpClient: c.Resolve <HttpClient>())) .AsSelf(); builder .Register(c => new ModelBuilder( cartActionProvider: c.Resolve <CartActionProvider>(), urlHelper: c.Resolve <UrlHelper>(), restrictedQuantityProvider: c.Resolve <RestrictedQuantityProvider>())) .AsSelf(); builder .Register(c => new SendWelcomeEmailProvider()) .AsSelf(); #region Model Metadata // ASP.NET will automatically use any registered ModelMetadataProvider. builder .Register(c => new AdnsfModelMetadataProvider( stringResourceProviderFactory: c.Resolve <IStringResourceProviderFactory>())) .As <ModelMetadataProvider>(); builder .Register(c => new StringResourceProviderFactory()) .As <IStringResourceProviderFactory>(); #endregion #region Tokens // Scan for ITokenHandlers in the same assembly as TokenExecutor and register them builder .RegisterAssemblyTypes(Assembly.GetAssembly(typeof(TokenExecutor))) .AssignableTo <ITokenHandler>() .As <ITokenHandler>(); builder .Register(c => new TokenExecutor( tokenHandlers: c.Resolve <IEnumerable <ITokenHandler> >())) .AsSelf(); builder .Register(c => new TokenParameterConverter()) .AsSelf(); builder .Register(c => new TokenEntityLinkBuilder( urlHelper: c.Resolve <UrlHelper>())) .AsSelf(); builder .Register(c => new TokenHtmlHelper( requestContext: c.Resolve <RequestContext>())) .AsSelf(); #endregion #region Routing builder .Register(c => new RoutingConfigurationProvider()) .As <IRoutingConfigurationProvider>(); #endregion #region Web API builder .RegisterApiControllers(typeof(Controllers.SiteInfoController).Assembly); builder .RegisterWebApiFilterProvider(GlobalConfiguration.Configuration); #endregion var container = builder.Build(); // Set up the MVC resolver DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); // Set up the Web API resolver GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); }
public static void RegisterDependencies() { var builder = new ContainerBuilder(); #region MVC builder.RegisterFilterProvider(); builder.RegisterControllers(typeof(Controllers.HomeController).Assembly); builder.RegisterModule <AutofacWebTypesModule>(); #endregion #region Addon API Modules builder.RegisterModule <Addon.Api.AddonApiServiceModule>(); builder.RegisterModule <Addon.Api.OrderInfoV1.OrderInfoModule>(); builder.RegisterModule <Addon.Api.ShippingV1.ShippingModule>(); builder.RegisterModule <Addon.Api.InventoryV1.InventoryModule>(); builder.RegisterModule <Addon.Api.PricingV1.PricingModule>(); #endregion #region AppConfigs builder .Register(c => new AppConfigLoader()) .AsSelf(); builder .Register(c => new AppConfigCache( appConfigLoader: c.Resolve <AppConfigLoader>())) .AsSelf() .SingleInstance() .OnActivating(c => c.Instance.ResetCache()); builder .Register(c => new AppConfigProvider( appConfigCache: c.Resolve <AppConfigCache>())) .AsSelf(); builder .Register(c => new AppConfigValueConverter()) .AsSelf(); #endregion #region GlobalConfigs builder .Register(c => new GlobalConfigLoader()) .AsSelf() .SingleInstance(); builder .Register(c => new GlobalConfigCache( globalConfigLoader: c.Resolve <GlobalConfigLoader>())) .AsSelf() .SingleInstance(); #endregion #region Caching builder .Register(c => new CachedShoppingCartProvider( cachedObjectProvider: c.Resolve <CachedObjectProvider <ShoppingCart, ShoppingCartCacheContext> >())) .SingleInstance() .As <ICachedShoppingCartProvider>(); builder .Register(c => new ShoppingCartCachedObjectContextBuilder( appConfigValueConverter: c.Resolve <AppConfigValueConverter>())) .SingleInstance() .As <ICachedObjectContextBuilder <ShoppingCart, ShoppingCartCacheContext> >(); builder .Register(c => new CachedAvaTaxRateProvider( cachedObjectProvider: c.Resolve <CachedObjectProvider <AvaTaxRate, AvaTaxRateCacheContext> >())) .SingleInstance() .As <ICachedAvaTaxRateProvider>(); builder .Register(c => new ShippingRateCachedObjectContextBuilder( appConfigValueConverter: c.Resolve <AppConfigValueConverter>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .SingleInstance() .As <ICachedObjectContextBuilder <AvaTaxRate, AvaTaxRateCacheContext> >(); builder .Register(c => new CachedShippingMethodCollectionProvider( cachedObjectProvider: c.Resolve <CachedObjectProvider <ShippingMethodCollection, ShippingMethodCollectionCacheContext> >())) .SingleInstance() .As <ICachedShippingMethodCollectionProvider>(); builder .Register(c => new ShippingMethodCollectionCachedObjectContextBuilder( shippingMethodCollectionProvider: c.Resolve <IShippingMethodCollectionProvider>(), appConfigValueConverter: c.Resolve <AppConfigValueConverter>())) .SingleInstance() .As <ICachedObjectContextBuilder <ShippingMethodCollection, ShippingMethodCollectionCacheContext> >(); builder .RegisterGeneric(typeof(CachedObjectProvider <,>)) .SingleInstance() .AsSelf(); builder .Register(c => new CacheProvider()) .SingleInstance() .AsSelf(); builder .Register(c => new HashProvider()) .SingleInstance() .AsSelf(); builder .Register(c => new CacheDependencyEvaluator( cacheProvider: c.Resolve <CacheProvider>(), dependencyStateProvider: c.Resolve <DependencyStateProvider>())) .SingleInstance() .AsSelf(); builder .Register(c => new DependencyStateProvider( managers: c.Resolve <IEnumerable <IDependencyStateManager> >())) .SingleInstance() .AsSelf(); builder .Register(c => new AppConfigDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), hashProvider: c.Resolve <HashProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); builder .Register(c => new AppConfigValueDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), hashProvider: c.Resolve <HashProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); builder .Register(c => new QueryDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), hashProvider: c.Resolve <HashProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); builder .Register(c => new CacheEntryDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), cacheProvider: c.Resolve <CacheProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); builder .Register(c => new CheckoutShippingSelectionDependencyStateManager( appConfigProvider: c.Resolve <AppConfigProvider>(), checkoutSelectionProvider: c.Resolve <ICheckoutSelectionProvider>(), persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>(), paymentMethodInfoProvider: c.Resolve <IPaymentMethodInfoProvider>(), hashProvider: c.Resolve <HashProvider>())) .As <IDependencyStateManager>() .SingleInstance() .AsSelf(); #endregion #region Checkout #region Checkout - Pre-Checkout Rules builder .Register(c => new OffsiteAddressRestrictionPreCheckoutRule( noticeProvider: c.Resolve <NoticeProvider>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new OffsiteAddressButInvalidPaymentMethodPreCheckoutRule()) .As <IPreCheckoutRule>(); builder .Register(c => new InventoryTrimmedPreCheckoutRule( cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>(), noticeProvider: c.Resolve <NoticeProvider>(), cartActionProvider: c.Resolve <CartActionProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new CartAgePreCheckoutRule( cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>(), cartActionProvider: c.Resolve <CartActionProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new PaymentMethodPreCheckoutRule( cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new ShippingSelectionPreCheckoutRule( cachedShippingMethodCollectionProvider: c.Resolve <ICachedShippingMethodCollectionProvider>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>(), shippingMethodCartItemApplicator: c.Resolve <IShippingMethodCartItemApplicator>(), effectiveShippingAddressProvider: c.Resolve <IEffectiveShippingAddressProvider>())) .As <IPreCheckoutRule>(); builder .Register(c => new CartItemAddressPreCheckoutRule( cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <IPreCheckoutRule>(); #endregion #region Checkout - Payment Method Cleanups builder .Register(c => new AmazonAppliedPaymentMethodCleanup( persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>())) .As <IAppliedPaymentMethodCleanup>(); builder .Register(c => new PayPalExpressAppliedPaymentMethodCleanup( persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>())) .As <IAppliedPaymentMethodCleanup>(); #endregion builder .Register(c => new AddressHeaderProvider()) .AsSelf(); builder .Register(c => new CartContextProvider( checkoutRules: c.Resolve <IEnumerable <IPreCheckoutRule> >(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <ICartContextProvider>(); builder .Register(c => new CheckoutSelectionProvider( persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>())) .As <ICheckoutSelectionProvider>(); builder .Register(c => new CheckoutEngine( paymentMethodInfoProvider: c.Resolve <IPaymentMethodInfoProvider>(), guards: c.Resolve <Guards>(), transitionBuilder: c.Resolve <TransitionBuilder>())) .AsSelf(); builder .Register(c => new TransitionBuilder( guards: c.Resolve <Guards>())) .AsSelf(); builder .Register(c => new Guards( cachedShippingMethodCollectionProvider: c.Resolve <ICachedShippingMethodCollectionProvider>(), giftCardManager: c.Resolve <GiftCardManager>(), appConfigProvider: c.Resolve <AppConfigProvider>(), checkoutAccountStatusProvider: c.Resolve <ICheckoutAccountStatusProvider>())) .AsSelf(); builder .Register(c => new PersistedCheckoutContextProvider()) .As <IPersistedCheckoutContextProvider>(); builder .Register(c => new CreditCardValidationProvider( creditCardTypeProvider: c.Resolve <CreditCardTypeProvider>())) .As <ICreditCardValidationProvider>(); builder .Register(c => new PaymentOptionProvider( urlHelper: c.Resolve <UrlHelper>(), paymentMethodInfoProvider: c.Resolve <IPaymentMethodInfoProvider>(), clientScriptRegistry: c.Resolve <IClientScriptRegistry>())) .As <IPaymentOptionProvider>(); builder .Register(c => new PaymentMethodInfoProvider()) .As <IPaymentMethodInfoProvider>(); builder .Register(c => new AuthorizeNetWalletProvider()) .As <IWalletProvider>(); builder .Register(c => new ShippingMethodCartItemApplicator()) .As <IShippingMethodCartItemApplicator>(); builder .Register(c => new EffectiveShippingAddressProvider( persistedCheckoutContextProvider: c.Resolve <IPersistedCheckoutContextProvider>())) .As <IEffectiveShippingAddressProvider>(); builder .Register(c => new CheckoutConfigurationProvider()) .As <ICheckoutConfigurationProvider>(); builder .Register(c => new CheckoutAccountStatusProvider( appConfigProvider: c.Resolve <AppConfigProvider>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .As <ICheckoutAccountStatusProvider>(); #endregion builder .Register(c => new Parser()) .AsSelf(); builder .Register(c => new ShippingMethodCollectionProvider()) .As <IShippingMethodCollectionProvider>(); builder .Register(c => new CaptchaVerificationProvider( appConfigProvider: c.Resolve <AppConfigProvider>())) .AsSelf(); builder .Register(c => new AddressControllerHelper( addressValidationProviderFactory: c.Resolve <IAddressValidationProviderFactory>())) .AsSelf(); builder .Register(c => new AddressSelectListBuilder()) .AsSelf(); builder .Register(c => new CreditCardSelectListBuilder()) .AsSelf(); builder .Register(c => new AddressValidationProviderFactory()) .As <IAddressValidationProviderFactory>(); builder .Register(c => new NoticeProvider( noticeStorageProvider: c.Resolve <INoticeStorageProvider>())) .AsSelf(); builder .Register(c => new AccountSettings()) .AsSelf(); builder .Register(c => new AddressSettings()) .AsSelf(); builder .Register(c => new AccountControllerHelper(c.Resolve <AccountSettings>())) .AsSelf(); builder .Register(c => AppLogic.AppConfigBool("UseLegacySENameProvider") ? (ISearchEngineNameProvider) new LegacySearchEngineNameProvider(new HttpContextWrapper(HttpContext.Current)) : (ISearchEngineNameProvider) new Utf8SearchEngineNameProvider(new HttpContextWrapper(HttpContext.Current))) .As <ISearchEngineNameProvider>() .InstancePerRequest(); builder .Register(c => new CartActionProvider( urlHelper: c.Resolve <UrlHelper>(), cachedShoppingCartProvider: c.Resolve <ICachedShoppingCartProvider>())) .AsSelf(); builder .Register(c => new RestrictedQuantityProvider()) .AsSelf(); builder .Register(c => new CookieNoticeStorageProvider(new HttpContextWrapper(HttpContext.Current))) .As <INoticeStorageProvider>() .InstancePerRequest(); builder .Register(c => new ClaimsRoleProvider()) .As <IClaimsRoleProvider>(); builder .Register(c => new ClaimsIdentityProvider( claimsRoleProvider: c.Resolve <IClaimsRoleProvider>(), defaultAuthenticationType: AuthValues.CookiesAuthenticationType, defaultIdentityProvider: AuthValues.CookiesAuthenticationIdentityProvider)) .As <IClaimsIdentityProvider>(); builder .RegisterGeneratedFactory <Func <IClaimsIdentityProvider> >() .SingleInstance(); builder .Register(c => new GiftCardManager()) .AsSelf(); builder .Register(c => new CreditCardTypeProvider()) .AsSelf(); builder .Register(c => new ECheckAccountTypeProvider()) .AsSelf(); builder .Register(c => new SkinProvider()) .As <ISkinProvider>() .AsSelf(); #region Filters builder.RegisterFilterProvider(); builder .Register(c => new CustomerRoleVerificationFilterAttribute(c.Resolve <IClaimsIdentityProvider>())) .AsAuthenticationFilterFor <Controller>(); builder .Register(c => new SiteDisclaimerFilterAttribute()) .AsAuthorizationFilterFor <Controller>(); builder .Register(c => new IpBlacklistFilterAttribute()) .AsAuthorizationFilterFor <Controller>(); builder .Register(c => new MaintenanceFilterAttribute()) .AsAuthorizationFilterFor <Controller>(); builder .Register(c => new SkinIdRouteDataFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new ReferrerCookieFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new CustomerQueryStringFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new UpdateCustomerActivityFilterAttribute( c.Resolve <AspDotNetStorefrontCore.DataRetention.IDataRetentionService>())) .AsActionFilterFor <Controller>(); builder .Register(c => new SecureAccessFilterAttribute()) .AsActionFilterFor <Controller>(); builder .Register(c => new ContentSecurityPolicyFilterAttribute()) .AsActionFilterFor <Controller>(); #endregion builder .Register(c => new UspsPostalCodeLookupProvider( appConfigProvider: c.Resolve <AppConfigProvider>())) .As <IPostalCodeLookupProvider>(); builder .Register(c => AmazonPaymentsConfiguration.CreateDefaultConfiguration()) .AsSelf(); builder .Register(c => new HttpClient()) .AsSelf(); builder .Register(c => new AmazonPaymentsApiProvider( configuration: c.Resolve <AmazonPaymentsConfiguration>(), httpClient: c.Resolve <HttpClient>())) .AsSelf(); builder .Register(c => new ModelBuilder( cartActionProvider: c.Resolve <CartActionProvider>(), urlHelper: c.Resolve <UrlHelper>(), restrictedQuantityProvider: c.Resolve <RestrictedQuantityProvider>())) .AsSelf(); builder .Register(c => new SendWelcomeEmailProvider()) .AsSelf(); builder .Register(c => new SiteMapSettingsProvider( appConfigProvider: c.Resolve <AppConfigProvider>())) .AsSelf(); builder .Register(c => new AspDotNetStorefrontCore.DataRetention.DataRetentionService( appConfigProvider: c.Resolve <AppConfigProvider>(), stringResourceProvider: c.Resolve <IStringResourceProvider>())) .As <AspDotNetStorefrontCore.DataRetention.IDataRetentionService>(); builder .Register(c => new PopupImageBuilder()) .As <IPopupImageBuilder>(); #region Model Metadata // ASP.NET will automatically use any registered ModelMetadataProvider. builder .Register(c => new AdnsfModelMetadataProvider( stringResourceProviderFactory: c.Resolve <IStringResourceProviderFactory>())) .As <ModelMetadataProvider>(); #endregion #region String Resources builder .Register(c => new StringResourceProviderFactory( appConfigProvider: c.Resolve <AppConfigProvider>())) .As <IStringResourceProviderFactory>(); // Use the factory to generate instances builder .Register(c => c.Resolve <IStringResourceProviderFactory>().Create()) .As <IStringResourceProvider>(); #endregion #region Tokens // Scan for ITokenHandlers in the same assembly as TokenExecutor and register them builder .RegisterAssemblyTypes(Assembly.GetAssembly(typeof(TokenExecutor))) .InNamespace(string.Join( ".", nameof(AspDotNetStorefrontCore), nameof(AspDotNetStorefrontCore.Tokens), nameof(AspDotNetStorefrontCore.Tokens.Handlers))) .AssignableTo <ITokenHandler>() .As <ITokenHandler>(); builder .Register((c, p) => new TokenExecutor( tokenHandlers: p.Any() ? p.Named <IEnumerable <ITokenHandler> >("handlers") : c.Resolve <IEnumerable <ITokenHandler> >())) .AsSelf(); builder .Register(c => new TokenParameterConverter()) .AsSelf(); builder .Register(c => new TokenEntityLinkBuilder( urlHelper: c.Resolve <UrlHelper>())) .AsSelf(); builder .Register(c => new TokenHtmlHelper( requestContext: c.Resolve <RequestContext>())) .AsSelf(); #endregion #region Routing builder .Register(c => new RoutingConfigurationProvider()) .As <IRoutingConfigurationProvider>(); #endregion #region Web API builder .RegisterApiControllers(typeof(Controllers.SiteInfoController).Assembly); builder .RegisterWebApiFilterProvider(GlobalConfiguration.Configuration); #endregion #region Client resource handling builder .Register(c => new DependencyGraphProvider()) .AsSelf(); builder .Register(c => new ClientScriptEqualityComparer( clientScriptResourceHandler: c.Resolve <ClientScriptResourceHandler>())) .AsSelf(); builder .Register(c => new ClientScriptRegistry( clientScriptResourceHandler: c.Resolve <ClientScriptResourceHandler>(), appConfigProvider: c.Resolve <AppConfigProvider>(), resourceEqualityComparer: c.Resolve <ClientScriptEqualityComparer>(), dependencyGraphProvider: c.Resolve <DependencyGraphProvider>())) .As <IClientScriptRegistry>(); builder .Register(c => new ClientScriptResourceHandler( clientScriptResourceHandlers: c.Resolve <IEnumerable <IClientScriptResourceHandler> >())) .AsSelf(); builder .Register(c => new InlineScriptClientResourceHandler()) .As <IClientScriptResourceHandler>(); builder .Register(c => new ScriptReferenceClientResourceHandler()) .As <IClientScriptResourceHandler>(); builder .Register(c => new BundledScriptReferenceClientResourceHandler( bundledResourceProvider: c.Resolve <IBundledResourceProvider>())) .As <IClientScriptResourceHandler>(); builder .Register(c => new BundledResourceProvider()) .As <IBundledResourceProvider>(); #endregion #region SignifydApi builder .Register(c => new SignifydConfigurationProvider( appConfigProvider: c.Resolve <AppConfigProvider>())) .AsSelf(); builder .Register(c => new SignifydCaseApi()) .AsSelf(); #endregion var config = new ConfigurationBuilder(); config.AddJsonFile("dependency.json", optional: true); var module = new ConfigurationModule(config.Build()); builder.RegisterModule(module); var container = builder.Build(); // Set up the MVC resolver DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); // Set up the Web API resolver GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); }