Ejemplo n.º 1
0
 public ScopePool(
     IObjectFactory factory,
     IDatabaseQueryManager queries,
     IExtensibilityProvider extensibilityProvider)
 {
     this.Factory = factory;
     this.Queries = queries;
     if (!int.TryParse(ConfigurationManager.AppSettings["Processing.PoolSize"], out Size))
         Size = 20;
     if (!Enum.TryParse<PoolMode>(ConfigurationManager.AppSettings["Processing.PoolMode"], out Mode))
     {
         //TODO: Mono has issues with BlockingCollection. use None as default
         int p = (int)Environment.OSVersion.Platform;
         if (p == 4 || p == 6 || p == 128)
             Mode = PoolMode.None;
         else
             Mode = PoolMode.IfAvailable;
     }
     var commandTypes = extensibilityProvider.FindPlugins<IServerCommand>();
     Factory.RegisterTypes(commandTypes, InstanceScope.Context);
     if (Mode != PoolMode.None)
     {
         if (Size < 1) Size = 1;
         for (int i = 0; i < Size; i++)
             Scopes.Add(SetupReadonlyScope());
     }
 }
Ejemplo n.º 2
0
        public QueryExecutor(
            IDatabaseQuery databaseQuery,
            IServiceProvider locator,
            IOracleConverterFactory converterFactory,
            IExtensibilityProvider extensibilityProvider)
        {
            Contract.Requires(databaseQuery != null);
            Contract.Requires(locator != null);
            Contract.Requires(converterFactory != null);
            Contract.Requires(extensibilityProvider != null);

            this.DatabaseQuery         = databaseQuery;
            this.Locator               = locator;
            this.ConverterFactory      = converterFactory;
            this.ExtensibilityProvider = extensibilityProvider;
        }
Ejemplo n.º 3
0
        public ProcessingEngine(
            IObjectFactory objectFactory,
            IScopePool scopePool,
            IPermissionManager permissions,
            IExtensibilityProvider extensibilityProvider)
        {
            Contract.Requires(objectFactory != null);
            Contract.Requires(scopePool != null);
            Contract.Requires(permissions != null);
            Contract.Requires(extensibilityProvider != null);

            this.ObjectFactory = objectFactory.CreateInnerFactory();
            this.ScopePool     = scopePool;
            this.Permissions   = permissions;
            var commandTypes = extensibilityProvider.FindPlugins <IServerCommand>();

            var commands = new Dictionary <Type, Type>();

            foreach (var ct in commandTypes)
            {
                commands[ct] = ct;
            }
            foreach (var ct in commandTypes)
            {
                var attr = ct.GetCustomAttributes(typeof(ExportMetadataAttribute), false) as ExportMetadataAttribute[];
                if (attr != null)
                {
                    var insteadOf = attr.FirstOrDefault(it => it.Name == Metadata.InsteadOf);
                    if (insteadOf != null)
                    {
                        var type = insteadOf.Value as Type;
                        if (commandTypes.All(it => it != type))
                        {
                            throw new FrameworkException("Can't find target {0} for InsteadOf attribute declared on {1}".With(type, ct));
                        }
                        commands[type] = ct;
                    }
                }
            }
            foreach (var ct in commands)
            {
                ActualCommands[ct.Key] = ObjectFactory.Resolve <IServerCommand>(ct.Value);
            }
        }
Ejemplo n.º 4
0
        public ProcessingEngine(
            IObjectFactory objectFactory,
            IDatabaseQueryManager transactionManager,
            IPermissionManager permissions,
            ILogFactory logFactory,
            IExtensibilityProvider extensibilityProvider)
        {
            Contract.Requires(objectFactory != null);
            Contract.Requires(transactionManager != null);
            Contract.Requires(permissions != null);
            Contract.Requires(logFactory != null);
            Contract.Requires(extensibilityProvider != null);

            this.ObjectFactory      = objectFactory.CreateInnerFactory();
            this.TransactionManager = transactionManager;
            this.Permissions        = permissions;
            this.Logger             = logFactory.Create("Processing engine");
            var commandTypes = extensibilityProvider.FindPlugins <IServerCommand>();

            ObjectFactory.RegisterTypes(commandTypes, InstanceScope.Transient);
            foreach (var ct in commandTypes)
            {
                ActualCommands[ct] = ct;
            }
            foreach (var ct in commandTypes)
            {
                var attr = ct.GetCustomAttributes(typeof(ExportMetadataAttribute), false) as ExportMetadataAttribute[];
                if (attr != null)
                {
                    var insteadOf = attr.FirstOrDefault(it => it.Name == Metadata.InsteadOf);
                    if (insteadOf != null)
                    {
                        var type = insteadOf.Value as Type;
                        if (commandTypes.All(it => it != type))
                        {
                            throw new FrameworkException("Can't find target {0} for InsteadOf attribute declared on {1}".With(type, ct));
                        }
                        ActualCommands[type] = ct;
                    }
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Resolve all plugins which implement specified interface.
        /// Plugins are cached and same instances are provided on subsequent calls.
        /// </summary>
        /// <typeparam name="TInterface">plugin must implement provided interface</typeparam>
        /// <param name="provider">extensibility service</param>
        /// <returns>resolved plugins</returns>
        public static IEnumerable <TInterface> ResolvePlugins <TInterface>(this IExtensibilityProvider provider)
        {
            Contract.Requires(provider != null);

            object cache;

            if (!CachedPlugins.TryGetValue(typeof(TInterface), out cache))
            {
                var result =
                    provider.FindPlugins <TInterface>()
                    .Aggregate <Type, List <TInterface> >(
                        new List <TInterface>(),
                        (list, it) =>
                {
                    list.Add((TInterface)Activator.CreateInstance(it));
                    return(list);
                });
                cache = result;
                CachedPlugins.TryAdd(typeof(TInterface), cache);
            }
            return((List <TInterface>)cache);
        }
Ejemplo n.º 6
0
        public PluginRepository(IExtensibilityProvider extensibilityProvider)
        {
            Contract.Requires(extensibilityProvider != null);

            var list = extensibilityProvider.FindPlugins <TTarget>();

            foreach (var type in list)
            {
                PluginDictionary[type.Name]     = type;
                PluginDictionary[type.FullName] = type;
                try
                {
                    PluginDictionary.Add(type.AssemblyQualifiedName, type);
                }
                catch (ArgumentException ex)
                {
                    throw new FrameworkException(@"Internal error. 
Adding same type twice: {0}.
Check export metadata on type.".With(type.AssemblyQualifiedName), ex);
                }
            }
        }
Ejemplo n.º 7
0
 public ScopePool(
     IObjectFactory factory,
     IDatabaseQueryManager queries,
     IExtensibilityProvider extensibilityProvider,
     ILogFactory logFactory)
 {
     this.Factory = factory;
     this.Queries = queries;
     if (!int.TryParse(ConfigurationManager.AppSettings["Processing.PoolSize"], out Size))
         Size = 20;
     if (!Enum.TryParse<PoolMode>(ConfigurationManager.AppSettings["Processing.PoolMode"], out Mode))
         Mode = PoolMode.IfAvailable;
     var commandTypes = extensibilityProvider.FindPlugins<IServerCommand>();
     Factory.RegisterTypes(commandTypes, InstanceScope.Context);
     if (Mode != PoolMode.None)
     {
         if (Size < 1) Size = 1;
         for (int i = 0; i < Size; i++)
             Scopes.Add(SetupReadonlyScope());
     }
     Logger = logFactory.Create("Scope pool");
 }
Ejemplo n.º 8
0
        public ScopePool(
            IObjectFactory factory,
            IDatabaseQueryManager queries,
            IExtensibilityProvider extensibilityProvider)
        {
            this.Factory = factory;
            this.Queries = queries;
            if (!int.TryParse(ConfigurationManager.AppSettings["Processing.PoolSize"], out Size))
            {
                Size = 20;
            }
            if (!Enum.TryParse <PoolMode>(ConfigurationManager.AppSettings["Processing.PoolMode"], out Mode))
            {
                //TODO: Mono has issues with BlockingCollection. use None as default
                int p = (int)Environment.OSVersion.Platform;
                if (p == 4 || p == 6 || p == 128)
                {
                    Mode = PoolMode.None;
                }
                else
                {
                    Mode = PoolMode.IfAvailable;
                }
            }
            var commandTypes = extensibilityProvider.FindPlugins <IServerCommand>();

            Factory.RegisterTypes(commandTypes, InstanceScope.Context);
            if (Mode != PoolMode.None)
            {
                if (Size < 1)
                {
                    Size = 1;
                }
                for (int i = 0; i < Size; i++)
                {
                    Scopes.Add(SetupReadonlyScope());
                }
            }
        }
		public static SqlCommandData GenerateSqlQuery(
			QueryModel queryModel,
			IServiceProvider locator,
			IPostgresConverterFactory factory,
			IExtensibilityProvider extensibilityProvider)
		{
			Contract.Requires(queryModel != null);
			Contract.Requires(locator != null);
			Contract.Requires(factory != null);
			Contract.Requires(extensibilityProvider != null);

			var visitor =
				new SqlGeneratorQueryModelVisitor(
					new MainQueryParts(
						locator,
						factory,
						extensibilityProvider.ResolvePlugins<IQuerySimplification>(),
						extensibilityProvider.ResolvePlugins<IExpressionMatcher>(),
						extensibilityProvider.ResolvePlugins<IMemberMatcher>(),
						extensibilityProvider.ResolvePlugins<IProjectionMatcher>()));
			visitor.VisitQueryModel(queryModel);
			return new SqlCommandData(visitor.QueryParts);
		}
Ejemplo n.º 10
0
        public static SqlCommandData GenerateSqlQuery(
            QueryModel queryModel,
            IServiceLocator locator,
            IPostgresConverterFactory factory,
            IExtensibilityProvider extensibilityProvider)
        {
            Contract.Requires(queryModel != null);
            Contract.Requires(locator != null);
            Contract.Requires(factory != null);
            Contract.Requires(extensibilityProvider != null);

            var visitor =
                new SqlGeneratorQueryModelVisitor(
                    new MainQueryParts(
                        locator,
                        factory,
                        extensibilityProvider.ResolvePlugins <IQuerySimplification>(),
                        extensibilityProvider.ResolvePlugins <IExpressionMatcher>(),
                        extensibilityProvider.ResolvePlugins <IMemberMatcher>(),
                        extensibilityProvider.ResolvePlugins <IProjectionMatcher>()));

            visitor.VisitQueryModel(queryModel);
            return(new SqlCommandData(visitor.QueryParts));
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Find all plugin types which implement specified interface/service contract.
        /// Plugin types are topologically sorted based on their dependencies.
        /// </summary>
        /// <typeparam name="TService">plugin must have specified service signature</typeparam>
        /// <param name="provider">extensibility service</param>
        /// <returns>found plugins</returns>
        public static IEnumerable <Type> FindPlugins <TService>(this IExtensibilityProvider provider)
        {
            Contract.Requires(provider != null);

            return(provider.FindPlugins <TService>((t, i) => true));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Find all implementations for concepts for specified interface.
        /// Result is collection of found concepts and their implementations.
        /// Implementations are topologically sorted based on their dependencies.
        /// </summary>
        /// <typeparam name="TImplementation">plugin must implement provided interface</typeparam>
        /// <param name="provider">extensibility service</param>
        /// <returns>map of concepts and their implementations</returns>
        public static Dictionary <Type, List <Type> > FindImplementations <TImplementation>(this IExtensibilityProvider provider)
        {
            Contract.Requires(provider != null);

            return(provider.FindImplementations <TImplementation>((t, i) => true));
        }
Ejemplo n.º 13
0
        public AspectConfiguration(IExtensibilityProvider extensibilityProvider)
        {
            Contract.Requires(extensibilityProvider != null);

            this.ExtensibilityProvider = extensibilityProvider;
        }
Ejemplo n.º 14
0
		public AspectConfiguration(IExtensibilityProvider extensibilityProvider)
		{
			Contract.Requires(extensibilityProvider != null);

			this.ExtensibilityProvider = extensibilityProvider;
		}