/// <summary> /// Configure root container.Register types and life time managers for unity builder process /// </summary> /// <param name="container">Container to configure</param> protected virtual void ConfigureContainer(IUnityContainer container) { //Take into account that Types and Mappings registration could be also done using the UNITY XML configuration //But we prefer doing it here (C# code) because we'll catch errors at compiling time instead execution time, if any type has been written wrong. //Register repositories mappings //to be done //Register default cache manager //container.RegisterType<ICacheManager, NopRequestCache>(new PerExecutionContextLifetimeManager()); //Register managers(services) mappings //container.RegisterType<ICatalogService, CatalogService>(new UnityPerExecutionContextLifetimeManager()) // .RegisterType(typeof(IRepository<>), typeof(BaseAaronDbContext<>)) //.RegisterType(typeof(AaronDbContext), typeof(BaseAaronDbContext<>)); //container.RegisterType<IPosterService, PosterService>(new UnityPerExecutionContextLifetimeManager()); //container.RegisterType<ICommentService, CommentService>(new UnityPerExecutionContextLifetimeManager()); //container.RegisterType<IAvatarService, AvatarService>(new UnityPerExecutionContextLifetimeManager()); var config = RegisterTypeConfig.GetConfig(); if (config != null) { if (config.RegisterType.Count > 0) { RegisterTypeElementColletion collection = config.RegisterType; for (int i = 0; i < collection.Count; i++) { container.RegisterType(Type.GetType(collection[i].Interface), Type.GetType(collection[i].Class), new UnityPerExecutionContextLifetimeManager()); //.RegisterType(typeof(IRepository<>), typeof(BaseAaronDbContext<,>)) //.RegisterType(typeof(AaronDbContext), typeof(BaseAaronDbContext<,>)); } container.RegisterType(typeof(IRepository <>), typeof(ImplRepository <>)); container.RegisterType(typeof(IContext), typeof(AaronDbContext)); } } //Object context //Connection string //if (ConfigurationManager.ConnectionStrings["CFDB"].ConnectionString != null) //{ // string connectionString = ConfigurationManager.ConnectionStrings["CFDB"].ConnectionString.ToString(); // InjectionConstructor connectionStringParam = new InjectionConstructor(connectionString); // //Registering object context // container.RegisterType<CFContext>(new UnityPerExecutionContextLifetimeManager(), connectionStringParam); //} }
private void ConfigureContainer(IKernel kernel) { // get assembly folder Uri uri = new Uri(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)); DirectoryInfo directoryInfo = new DirectoryInfo(uri.LocalPath); //data layer kernel.Bind <DataSettingsManager>().ToSelf(); kernel.Bind <DataSettings>().ToMethod(x => Resolve <DataSettingsManager>().LoadSettings()); kernel.Bind <DataProviderManager>().ToConstructor <BaseDataProviderManager>(x => new BaseDataProviderManager(x.Inject <DataSettings>())); kernel.Bind <IDataProvider>().ToMethod(x => (IEfDataProvider)Resolve <DataProviderManager>().LoadDataProvider()); kernel.Bind <IEfDataProvider>().ToMethod(x => (IEfDataProvider)Resolve <DataProviderManager>().LoadDataProvider()); //init database if (Resolve <DataSettings>() != null && Resolve <DataSettings>().IsValid()) { var dataProvider = (IEfDataProvider)Resolve <IDataProvider>(); dataProvider.InitConnectionFactory(); } kernel.Bind <IContext>().To <AaronDbContext>().InSingletonScope().WithConstructorArgument("settings", x => Resolve <DataSettings>()); kernel.Bind(typeof(IRepository <>)).To(typeof(ImplRepository <>)).InSingletonScope(); //register type var config = RegisterTypeConfig.GetConfig(); if (config != null) { if (config.RegisterType.Count > 0) { RegisterTypeElementColletion collection = config.RegisterType; for (int i = 0; i < collection.Count; i++) { kernel.Bind(Type.GetType(collection[i].Interface)).To(Type.GetType(collection[i].Class)).InSingletonScope(); } } } // register type in core kernel.Bind <ISettingService>().To <SettingService>().InSingletonScope(); // message binding kernel.Bind <IEmailSender>().To <EmailSender>().InSingletonScope(); kernel.Bind <IEmailAccountService>().To <EmailAccountService>().InSingletonScope(); kernel.Bind <IQueuedEmailService>().To <QueuedEmailService>().InSingletonScope(); kernel.Bind <ITokenizer>().To <Tokenizer>().InSingletonScope(); kernel.Bind <ICampaignService>().To <CampaignService>().InSingletonScope(); // cache manager kernel.Bind <ICacheManager>().To <MemoryCacheManager>(); // thread manager kernel.Bind <IThreadManager>().To <ThreadManager>(); // Schedule Task kernel.Bind <IScheduleTaskService>().To <ScheduleTaskService>(); // system configuration kernel.Bind(typeof(ISysConfigurationProvider <>)).To(typeof(SysConfigurationProvider <>)).InSingletonScope(); // bind ISettings kernel.Bind(x => x.FromAssembliesInPath(directoryInfo.FullName).Select(type => type != null && type.IsClass && typeof(ISettings).IsAssignableFrom(type)).BindWith(new BindingSettingSource())); CustomConfigureContainer(kernel); }