Exemplo n.º 1
0
        public IServiceProvider ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {

            var typeFinder = new DefaultTypeFinder();



            //register Plugins dependancies 

            var startupConfigurations = typeFinder.FindClassesOfType<IMiniTaskStartUp>();
            var instances = startupConfigurations
            .Select(startup => (IMiniTaskStartUp)Activator.CreateInstance(startup));
            foreach (var instance in instances)
                instance.ConfigureServices(services, configuration);

            return _serviceProvider;
            
          
        }
Exemplo n.º 2
0
        public static void Init()
        {
            var builder = new ContainerBuilder();

            // builder.RegisterInstance(LogFactory.CreateLoger("log4Net")).As<ILog>();
            //注册程序集
            //  builder.RegisterType<Log4NetWritter>().As<ILogger>();
            builder.RegisterInstance(NLog.LogManager.GetCurrentClassLogger()).As <NLog.ILogger>();
            builder.RegisterType <NLogWriter>().As <ILogger>();
            builder.RegisterType <ExcelService>().As <IExcel>();
            // register dependency
            var typeFinder = new DefaultTypeFinder();
            // builder.RegisterInstance(typeFinder).As<ITypeFinder>().SingleInstance();
            // var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>();
            // var drInstances = new List<IDependencyRegistrar>();
            // foreach (var drType in drTypes)
            //     drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));
            //// drInstances = drInstances.AsQueryable().ToList();
            // foreach (var dependencyRegistrar in drInstances)
            // {
            //     dependencyRegistrar.Register(builder, typeFinder);
            // }

            //注册各层业务组件
            var assemblies = typeFinder.LoadAssemblies();

            //builder.RegisterAssemblyTypes(assemblies).AsImplementedInterfaces();
            builder.RegisterAssemblyTypes(assemblies).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces();
            builder.RegisterAssemblyTypes(assemblies).Where(t => t.Name.EndsWith("Facade")).AsImplementedInterfaces();

            //register event
            var consumers = typeFinder.FindClassesOfType(typeof(IConsumer <>)).ToList();

            foreach (var consumer in consumers)
            {
                builder.RegisterType(consumer)
                .As(consumer.FindInterfaces((type, criteria) =>
                {
                    var isMatch = type.IsGenericType && ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
                    return(isMatch);
                }, typeof(IConsumer <>)))
                .InstancePerLifetimeScope();
            }
            // register validator
            //var validators = typeFinder.FindClassesOfType(typeof(IValidator<>)).ToList();
            //foreach (var validator in validators)
            //{
            //    builder.RegisterType(validator)
            //        .As(validator.FindInterfaces((type, criteria) =>
            //        {
            //            var isMatch = type.IsGenericType && ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
            //            return isMatch;
            //        }, typeof(IValidator<>)))
            //        .InstancePerLifetimeScope();
            //}

            builder.RegisterType <EventPublisher>().As <IEventPublisher>().SingleInstance();
            builder.RegisterType <SubscriptionService>().As <ISubscriptionService>().SingleInstance();
            builder.RegisterType <MemoryCacheManager>().As <ICacheManager>().SingleInstance();

            _autofacContainer = builder.Build();
            // 初始化容器管理对象
            Singleton <IContainerManager> .Instance = new AutofacContainer(_autofacContainer);
        }