/// <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);
            //}
        }
示例#2
0
        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);
        }