@@ -87,6 +87,7 @@ public static class ContainerBuilderExtensions
8787 {
8888 private static List < Assembly > _referenceAssembly = new List < Assembly > ( ) ;
8989 private static List < AbstractModule > _modules = new List < AbstractModule > ( ) ;
90+
9091 /// <summary>
9192 /// 添加Json序列化支持。
9293 /// </summary>
@@ -486,7 +487,7 @@ public static IServiceBuilder RegisterServices(this IServiceBuilder builder, par
486487 try
487488 {
488489 var services = builder . Services ;
489- var referenceAssemblies = GetReferenceAssembly ( virtualPaths ) ;
490+ var referenceAssemblies = GetAssemblies ( virtualPaths ) ;
490491 foreach ( var assembly in referenceAssemblies )
491492 {
492493 services . RegisterAssemblyTypes ( assembly )
@@ -527,7 +528,7 @@ public static IServiceBuilder RegisterServiceBus
527528 ( this IServiceBuilder builder , params string [ ] virtualPaths )
528529 {
529530 var services = builder . Services ;
530- var referenceAssemblies = GetReferenceAssembly ( virtualPaths ) ;
531+ var referenceAssemblies = GetAssemblies ( virtualPaths ) ;
531532
532533 foreach ( var assembly in referenceAssemblies )
533534 {
@@ -548,7 +549,7 @@ public static IServiceBuilder RegisterRepositories
548549 ( this IServiceBuilder builder , params string [ ] virtualPaths )
549550 {
550551 var services = builder . Services ;
551- var referenceAssemblies = GetReferenceAssembly ( virtualPaths ) ;
552+ var referenceAssemblies = GetAssemblies ( virtualPaths ) ;
552553
553554 foreach ( var assembly in referenceAssemblies )
554555 {
@@ -562,19 +563,7 @@ public static IServiceBuilder RegisterModules(
562563 this IServiceBuilder builder , params string [ ] virtualPaths )
563564 {
564565 var services = builder . Services ;
565- List < Assembly > referenceAssemblies = new List < Assembly > ( ) ;
566- if ( virtualPaths . Any ( ) )
567- {
568- referenceAssemblies = GetReferenceAssembly ( virtualPaths ) ;
569- }
570- else
571- {
572- string [ ] assemblyNames = DependencyContext
573- . Default . GetDefaultAssemblyNames ( ) . Select ( p => p . Name ) . ToArray ( ) ;
574- assemblyNames = GetFilterAssemblies ( assemblyNames ) ;
575- foreach ( var name in assemblyNames )
576- referenceAssemblies . Add ( Assembly . Load ( name ) ) ;
577- }
566+ var referenceAssemblies = GetAssemblies ( virtualPaths ) ;
578567 if ( builder == null ) throw new ArgumentNullException ( "builder" ) ;
579568 var packages = ConvertDictionary ( AppConfig . ServerOptions . Packages ) ;
580569 foreach ( var moduleAssembly in referenceAssemblies )
@@ -614,11 +603,11 @@ public static IEnumerable<string> GetDataContractName(this IServiceBuilder build
614603 {
615604 var namespaces = new List < string > ( ) ;
616605 var assemblies = builder . GetInterfaceService ( )
617- . Select ( p=> p . Assembly )
606+ . Select ( p => p . Assembly )
618607 . Union ( GetSystemModules ( ) )
619608 . Distinct ( )
620609 . ToList ( ) ;
621-
610+
622611 assemblies . ForEach ( assembly =>
623612 {
624613 namespaces . AddRange ( assembly . GetTypes ( ) . Where ( t => t . GetCustomAttribute < DataContractAttribute > ( ) != null ) . Select ( n => n . Namespace ) ) ;
@@ -628,7 +617,7 @@ public static IEnumerable<string> GetDataContractName(this IServiceBuilder build
628617
629618 private static IDictionary < string , string > ConvertDictionary ( List < ModulePackage > list )
630619 {
631- var result = new Dictionary < string , string > ( ) ;
620+ var result = new Dictionary < string , string > ( ) ;
632621 list . ForEach ( p =>
633622 {
634623 result . Add ( p . TypeName , p . Using ) ;
@@ -651,15 +640,15 @@ private static List<Assembly> GetReferenceAssembly(params string[] virtualPaths)
651640 paths . ForEach ( path =>
652641 {
653642 var assemblyFiles = GetAllAssemblyFiles ( path ) ;
654-
643+
655644 foreach ( var referencedAssemblyFile in assemblyFiles )
656645 {
657646 var referencedAssembly = Assembly . LoadFrom ( referencedAssemblyFile ) ;
658647 if ( ! _referenceAssembly . Contains ( referencedAssembly ) )
659648 _referenceAssembly . Add ( referencedAssembly ) ;
660649 refAssemblies . Add ( referencedAssembly ) ;
661650 }
662- result = existsPath ? refAssemblies : _referenceAssembly ;
651+ result = existsPath ? refAssemblies : _referenceAssembly ;
663652 } ) ;
664653 }
665654 return result ;
@@ -672,14 +661,33 @@ private static List<Assembly> GetSystemModules()
672661 foreach ( var referenceAssembly in referenceAssemblies )
673662 {
674663 var abstractModules = GetAbstractModules ( referenceAssembly ) ;
675- if ( abstractModules . Any ( p => p . GetType ( ) . IsSubclassOf ( typeof ( SystemModule ) ) ) )
664+ if ( abstractModules . Any ( p => p . GetType ( ) . IsSubclassOf ( typeof ( SystemModule ) ) ) )
676665 {
677666 assemblies . Add ( referenceAssembly ) ;
678667 }
679668 }
680669 return assemblies ;
681670 }
682671
672+ private static List < Assembly > GetAssemblies ( params string [ ] virtualPaths )
673+ {
674+ var referenceAssemblies = new List < Assembly > ( ) ;
675+ if ( virtualPaths . Any ( ) )
676+ {
677+ referenceAssemblies = GetReferenceAssembly ( virtualPaths ) ;
678+ }
679+ else
680+ {
681+ string [ ] assemblyNames = DependencyContext
682+ . Default . GetDefaultAssemblyNames ( ) . Select ( p => p . Name ) . ToArray ( ) ;
683+ assemblyNames = GetFilterAssemblies ( assemblyNames ) ;
684+ foreach ( var name in assemblyNames )
685+ referenceAssemblies . Add ( Assembly . Load ( name ) ) ;
686+ _referenceAssembly . AddRange ( referenceAssemblies . Except ( _referenceAssembly ) ) ;
687+ }
688+ return referenceAssemblies ;
689+ }
690+
683691 private static List < AbstractModule > GetAbstractModules ( Assembly assembly )
684692 {
685693 var abstractModules = new List < AbstractModule > ( ) ;
@@ -694,9 +702,9 @@ private static List<AbstractModule> GetAbstractModules(Assembly assembly)
694702 return abstractModules ;
695703 }
696704
697- private static string [ ] GetFilterAssemblies ( string [ ] assemblyNames )
705+ private static string [ ] GetFilterAssemblies ( string [ ] assemblyNames )
698706 {
699- var notRelatedFile = AppConfig . ServerOptions . NotRelatedAssemblyFiles ;
707+ var notRelatedFile = AppConfig . ServerOptions . NotRelatedAssemblyFiles ;
700708 var relatedFile = AppConfig . ServerOptions . RelatedAssemblyFiles ;
701709 var pattern = string . Format ( "^Microsoft.\\ w*|^System.\\ w*|^DotNetty.\\ w*|^runtime.\\ w*|^ZooKeeperNetEx\\ w*|^StackExchange.Redis\\ w*|^Consul\\ w*|^Newtonsoft.Json.\\ w*|^Autofac.\\ w*{0}" ,
702710 string . IsNullOrEmpty ( notRelatedFile ) ? "" : $ "|{ notRelatedFile } ") ;
@@ -713,7 +721,7 @@ private static string[] GetFilterAssemblies(string[] assemblyNames)
713721 return
714722 assemblyNames . Where (
715723 name => ! notRelatedRegex . IsMatch ( name ) ) . ToArray ( ) ;
716- }
724+ }
717725 }
718726
719727 private static List < string > GetAllAssemblyFiles ( string parentDir )
@@ -734,7 +742,7 @@ private static List<string> GetAllAssemblyFiles(string parentDir)
734742 {
735743 return
736744 Directory . GetFiles ( parentDir , "*.dll" ) . Select ( Path . GetFullPath ) . Where (
737- a => ! notRelatedRegex . IsMatch ( a ) ) . ToList ( ) ;
745+ a => ! notRelatedRegex . IsMatch ( Path . GetFileName ( a ) ) ) . ToList ( ) ;
738746 }
739747 }
740748 }
0 commit comments