diff --git a/src/Interception/Interception/CodeGeneration/CodeGenerationContext.cs b/src/Interception/Interception/CodeGeneration/CodeGenerationContext.cs index 95dea7d..c328b7f 100644 --- a/src/Interception/Interception/CodeGeneration/CodeGenerationContext.cs +++ b/src/Interception/Interception/CodeGeneration/CodeGenerationContext.cs @@ -25,6 +25,24 @@ public sealed class CodeGenerationContext typeof(CodeGenerationContext).Assembly }; + /// + /// Add reference, support generic type + /// + /// + /// + public ISet AddReference(Type type) + { + if (type.IsGenericType) + { + var types = type.GetGenericArguments(); + foreach (var t in types) + return AddReference(t); + } + else + this.References.Add(type.Assembly); + return References; + } + /// Gets the indent level. /// The indent level. public int IndentLevel { get; private set; } diff --git a/src/Interception/Interception/CodeGeneration/InterfaceProxyGenerator.cs b/src/Interception/Interception/CodeGeneration/InterfaceProxyGenerator.cs index d47f53a..bf5cc51 100644 --- a/src/Interception/Interception/CodeGeneration/InterfaceProxyGenerator.cs +++ b/src/Interception/Interception/CodeGeneration/InterfaceProxyGenerator.cs @@ -50,10 +50,10 @@ public override bool TryGenerate(ServiceDescriptor serviceDescriptor, CodeGenera foreach (var method in methods) { - codeGenerationContext.References.Add(method.ReturnType.Assembly); + codeGenerationContext.AddReference(method.ReturnType); foreach (var parameter in method.GetParameters()) { - codeGenerationContext.References.Add(parameter.ParameterType.Assembly); + codeGenerationContext.AddReference(parameter.ParameterType); } } diff --git a/src/Interception/Interception/CodeGeneration/VirtualMethodProxyGenerator.cs b/src/Interception/Interception/CodeGeneration/VirtualMethodProxyGenerator.cs index 079a573..d9ea5ae 100644 --- a/src/Interception/Interception/CodeGeneration/VirtualMethodProxyGenerator.cs +++ b/src/Interception/Interception/CodeGeneration/VirtualMethodProxyGenerator.cs @@ -203,10 +203,10 @@ public override bool TryGenerate(ServiceDescriptor serviceDescriptor, CodeGenera foreach (var method in interceptableMethods) { - codeGenerationContext.References.Add(method.ReturnType.Assembly); + codeGenerationContext.AddReference(method.ReturnType); foreach (var parameter in method.GetParameters()) { - codeGenerationContext.References.Add(parameter.ParameterType.Assembly); + codeGenerationContext.AddReference(parameter.ParameterType); } }