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; }
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); }