/// <summary>
        ///     Use database as the messaging backplane for scaling out of ASP.NET SignalR applications in a web farm.
        /// </summary>
        /// <param name="resolver">The dependency resolver.</param>
        /// <param name="connectionString">The database connection string.</param>
        /// <param name="providerType"></param>
        /// <returns>The dependency resolver.</returns>
        public static IDependencyResolver UseFluentNHibernate(this IDependencyResolver resolver,
                                                              string connectionString, ProviderTypeEnum providerType)
        {
            var config = new FNHScaleoutConfiguration(connectionString, providerType);

            return(UseFluentNHibernate(resolver, config));
        }
Exemple #2
0
        /// <summary>
        ///     Use database as the messaging backplane for scaling out of ASP.NET SignalR applications in a web farm.
        /// </summary>
        /// <param name="resolver">The dependency resolver.</param>
        /// <param name="configuration">The SQL scale-out configuration options.</param>
        /// <param name="serviceProvider"></param>
        /// <returns>The dependency resolver.</returns>
        public static IDependencyResolver UseFluentNHibernate(this IDependencyResolver resolver,
                                                              FNHScaleoutConfiguration configuration, IServiceProvider serviceProvider = null)
        {
            if (resolver == null)
            {
                throw new ArgumentNullException(nameof(resolver));
            }

            if (serviceProvider == null)
            {
                var sc = new ServiceCollection();
                sc.AddLogging();
                serviceProvider = sc.BuildServiceProvider();
            }
            else
            {
                var test = serviceProvider.GetService <ILogger <KoreMessageBus> >();
                if (test == null)
                {
                    throw new ArgumentException(
                              $"Configured service provider must provide logging ({typeof(ILogger).FullName})");
                }
            }

            var bus =
                new KoreMessageBus(resolver, configuration, serviceProvider).WithRepository(c =>
                                                                                            new FluentNHibernateMessageRepository(configuration, serviceProvider.GetService <ILogger <FluentNHibernateMessageRepository> >()));

            bus.Start();
            resolver.Register(typeof(IMessageBus), () => bus);

            return(resolver);
        }
Exemple #3
0
        internal FNHMessageBus(IDependencyResolver resolver, FNHScaleoutConfiguration configuration)
            : base(resolver, configuration)
        {
            _configuration = configuration ?? throw new ArgumentNullException("configuration");

            var traceManager = resolver.Resolve <ITraceManager>();

            _trace = traceManager[typeof(FNHMessageBus).FullName];

            ThreadPool.QueueUserWorkItem(Initialize);
        }
        /// <summary>
        ///     Use database as the messaging backplane for scaling out of ASP.NET SignalR applications in a web farm.
        /// </summary>
        /// <param name="resolver">The dependency resolver.</param>
        /// <param name="configuration">The SQL scale-out configuration options.</param>
        /// <returns>The dependency resolver.</returns>
        public static IDependencyResolver UseFluentNHibernate(this IDependencyResolver resolver,
                                                              FNHScaleoutConfiguration configuration)
        {
            if (resolver == null)
            {
                throw new ArgumentNullException("resolver");
            }


            var bus = new Lazy <FNHMessageBus>(() => { return(new FNHMessageBus(resolver, configuration)); });

            resolver.Register(typeof(IMessageBus), () => bus.Value);

            return(resolver);
        }
        /// <summary>
        /// </summary>
        /// <param name="configuration"></param>
        /// <param name="logger"></param>
        public FluentNHibernateMessageRepository(FNHScaleoutConfiguration configuration,
                                                 ILogger <FluentNHibernateMessageRepository> logger)
        {
            _configuration = configuration;
            var sessionFactoryInfo = SessionFactoryBuilder.GetFromAssemblyOf <MessagePayloadMap_0>(
                configuration.ProviderType, configuration.ConnectionString,
                new FluentNHibernatePersistenceBuilderOptions {
                DefaultSchema = configuration.DefaultSchema
            });

            _logger         = logger;
            _sessionFactory = sessionFactoryInfo.SessionFactory;
            for (var streamIndex = 0; streamIndex < configuration.StreamCount; streamIndex++)
            {
                _streamInfos[streamIndex] = new StreamInfo(streamIndex);
            }
        }