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