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 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; }
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); } }
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; } } } }
/// <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); }
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); } } }
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"); }
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); }
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)); }
/// <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)); }
/// <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)); }
public AspectConfiguration(IExtensibilityProvider extensibilityProvider) { Contract.Requires(extensibilityProvider != null); this.ExtensibilityProvider = extensibilityProvider; }