void ScanAndRegisterHandlers(IBinder binder, IScanner scanner) { var handlerTups = scanner.ScanTypes(typeof(Registrar).Assembly) .Where(t => !t.IsAbstract) .Select(t => new { ImplType = t, IntType = t.GetInterfaces() .SingleOrDefault(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IQueryHandler<,>)) }) .Where(tup => tup.IntType != null); foreach(var tup in handlerTups) { binder.Bind(tup.IntType, tup.ImplType); } }
public void Register(IBinder x, IScanner scanner) { x.Bind<HttpContext>(_ => HttpContext.Current); x.Bind<HttpContextBase>(_ => new HttpContextWrapper(HttpContext.Current)); x.Bind(c => c.Resolve<HttpContext>().Request); x.Bind(c => c.Resolve<HttpContext>().Response); x.Bind(c => c.Resolve<HttpContext>().Server); x.Bind(c => c.Resolve<HttpContext>().Session); x.BindSingleton<ICache>(_ => new BrigitaCache(MemoryCache.Default)); x.Bind<ICacheManager, MemoryCacheManager>(); //x.Register<IRoutePublisher, RoutePublisher>(); x.Bind<IEventPublisher, EventPublisher>(); x.Bind<ISubscriptionService, SubscriptionService>(); x.Bind<IGenericAttributeService, GenericAttributeService>(); x.Bind<IPluginFinder, BrigitaPluginFinder>(); x.Bind<ILogger, NullLogger>(); x.BindGeneric(typeof(IRepo<>), typeof(Repo<>)); x.Bind<ILinkProvider, LinkProvider>(); x.Bind<IMediator, Mediator>(); x.Bind<IPicSource, PicSource>(); x.Bind<IPictureService, PictureService>(); x.Bind<ILocaleContext, LocaleContext>(); x.Bind<ILocaleCodeProvider, LocaleCodeProvider>(); x.BindGeneric(typeof(ILocalizer<>), typeof(Localizer<>)); x.BindGeneric(typeof(IStringLocalizer<>), typeof(StringLocalizer<>)); x.BindGeneric(typeof(ICurrencyLocalizer<>), typeof(CurrencyLocalizer<>)); x.Bind<IWorkContext, BrigitaWorkContext>(); x.Bind<IPageHelper, PageHelper>(); x.Bind<ILinkHelper, LinkHelper>(); //!!!!!!!! JUST FOR TESTING... !!!!!!!!! x.Bind(new StoreInformationSettings()); x.Bind(new TaxSettings()); x.Bind(new CurrencySettings()); x.Bind(new LocalizationSettings()); x.Bind(new CustomerSettings()); x.Bind(new CommonSettings()); x.Bind(new CatalogSettings()); x.Bind(new SeoSettings()); x.Bind(new MediaSettings()); x.Bind<ISettingService, SettingService>(); x.Bind<IUserAgentHelper, UserAgentHelper>(); x.Bind<IWebHelper, WebHelper>(); /*x.Bind<IWorkContext, WebWorkContext>();*/ x.Bind<IStoreContext, WebStoreContext>(); x.Bind<ICategories, BrigitaCategories>(); x.Bind<IScopedCategories, ScopedCategories>(); x.Bind<IProducts, BrigitaProducts>(); x.Bind<ICustomerService, CustomerService>(); x.Bind<IVendorService, VendorService>(); x.Bind<IStoreService, BrigitaStores>(); x.Bind<IAuthenticationService, FormsAuthenticationService>(); x.Bind<ILanguageService, LanguageService>(); x.Bind<ICurrencyService, CurrencyService>(); x.Bind<IStoreMappingService, StoreMappingService>(); x.Bind<IPageHeadBuilder, PageHeadBuilder>(); //data layer var dataSettingsManager = new DataSettingsManager(); var dataProviderSettings = dataSettingsManager.LoadSettings(); x.Bind<DataSettings>(c => dataSettingsManager.LoadSettings()); x.BindTransient<BaseDataProviderManager, EfDataProviderManager>(); x.BindTransient<IDataProvider>(c => c.Resolve<BaseDataProviderManager>().LoadDataProvider()); if(dataProviderSettings != null && dataProviderSettings.IsValid()) { var efDataProviderManager = new EfDataProviderManager(dataSettingsManager.LoadSettings()); var dataProvider = efDataProviderManager.LoadDataProvider(); dataProvider.InitConnectionFactory(); x.Bind<IDbContext>(c => new NopObjectContext(dataProviderSettings.DataConnectionString, false, false)); } else { x.Bind<IDbContext>(c => new NopObjectContext(dataSettingsManager.LoadSettings().DataConnectionString, false, false)); } x.BindGeneric(typeof(IRepository<>), typeof(EfRepository<>)); //all entities taken from the db should be auto cached, var controllerTypes = scanner.ScanTypes(typeof(Registrar).Assembly) .Where(t => !t.IsAbstract && typeof(IController).IsAssignableFrom(t)); foreach(var type in controllerTypes) { x.Bind(type, type); } }