Beispiel #1
0
        static void Main(string[] args)
        {
            IAssemblyTypeLoader assemblyTypeLoader = new AssemblyTypeLoader();
            IAppConfiguration configuration = new AppConfiguration();

            try
            {                
                var inputDataProvider = assemblyTypeLoader.LoadType<IInputDataProvider>(configuration.ProviderFactoryAssemblyPath);
                var dataPersistor = assemblyTypeLoader.LoadType<IOutputDataPersistor>(configuration.ProviderFactoryAssemblyPath);
                LaunchSentenceProcessing(inputDataProvider, dataPersistor);
            }
            catch (ConfigurationErrorsException ex)
            {
                Console.WriteLine("An error occurred during the configuration load. Please check AppConfig is correctly set up. Error details: {0}", ex.Message);
            }
            catch(ArgumentNullException ex)
            {
                Console.WriteLine("An error occurred. Error details: {0}", ex.Message);
            }
            catch(ArgumentException ex)
            {
                Console.WriteLine("An error occurred. Provided path is incorrect. Error details: {0}", ex.Message);
            }
            catch (IOException ex)
            {
                Console.WriteLine("An error occurred during the assembly load. Please check if, dependencies are correctly set up. Error details: {0}", ex.Message);
            }
            catch (TypeLoadException ex)
            {
                Console.WriteLine("An error occurred during the assembly load. Error details: {0}", ex.Message);
            }

            Console.WriteLine("Application has finished running and will be closed after key press.");
            Console.ReadKey();
        }
        /// <summary>
        /// Get service definitions.
        /// </summary>
        /// <returns>Service definitions.</returns>
        private static IEnumerable <IServiceDefinition> GetServicesDefinition()
        {
            var serviceList = new List <IServiceDefinition>();

            IEnumerable <Assembly> assembiles = AssemblyLoader.LoadAll();
            IEnumerable <Type>     services   = assembiles.SelectMany(assembly => AssemblyTypeLoader.GetTypes(assembly, ContainsAutoSetupServiceAttribute));
            var serviceGroup = services.SelectMany(service => service.GetCustomAttributes <DependencyInjectionAttribute>().Select(attr => new { Attr = attr, Impl = service }))
                               .GroupBy(define => define.Attr.Service);


            foreach (var service in serviceGroup)
            {
                var highPriorityImpl = service.OrderByDescending(impl => impl.Attr.Priority).First();
                serviceList.Add(new ServiceDefinition(highPriorityImpl.Attr.Service, highPriorityImpl.Impl, highPriorityImpl.Attr.LifeTime));
            }

            return(serviceList);
        }
Beispiel #3
0
        /// <summary>
        /// 通过Xml节点加载数据
        /// </summary>
        /// <param name="node">节点</param>
        /// <param name="assemblyTypeLoader">节点</param>
        /// <returns></returns>
        public static Type LoadFromXmlNode(XmlNode node, AssemblyTypeLoader loader)
        {
            string assembly = null;
            string typeName = null;

            foreach (XmlAttribute att in node.Attributes)
            {
                if (att.Name.Equals("assembly", StringComparison.CurrentCultureIgnoreCase))
                {
                    assembly = att.InnerText;
                }
                else if (att.Name.Equals("type", StringComparison.CurrentCultureIgnoreCase))
                {
                    typeName = att.InnerText;
                }
            }

            return(loader.LoadType(typeName, assembly));
        }
Beispiel #4
0
        public void AddService(IServiceCollection service)
        {
            var assembiles = AssemblyLoader.LoadAll();

            var services = assembiles
                           .SelectMany(assembly => AssemblyTypeLoader.GetTypes(assembly, ContainsDependencyInjectionAttribute));

            var serviceGroup = services
                               .SelectMany(s => s.GetCustomAttributes <DependencyInjectionAttribute>().Select(attr => new { Attr = attr, Impl = s })).GroupBy(define => define.Attr.Service);

            foreach (var s in serviceGroup)
            {
                var instance = s.FirstOrDefault();

                if (instance == null)
                {
                    continue;
                }

                //注入
                service.AddSingleton(instance.Attr.Service, instance.Impl);
            }
        }