Skip to content

Commit 595fc62

Browse files
authored
Merge pull request #25 from yfital/interception_works_once
Fix multiple intreceptors issue due to .net core logic change
2 parents 0ae00b0 + dcb662c commit 595fc62

File tree

5 files changed

+27
-42
lines changed

5 files changed

+27
-42
lines changed

src/Interceptors/InstanceInterceptors/InterfaceInterception/InterfaceInterceptorClassGenerator.Desktop.cs

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/Interceptors/InstanceInterceptors/InterfaceInterception/InterfaceInterceptorClassGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private void CreateTypeBuilder()
176176
{
177177
TypeAttributes newAttributes = TypeAttributes.Public | TypeAttributes.Class;
178178

179-
ModuleBuilder moduleBuilder = GetModuleBuilder();
179+
ModuleBuilder moduleBuilder = InterceptorClassGenerator.CreateModuleBuilder(AssemblyBuilder);
180180
_typeBuilder = moduleBuilder.DefineType(CreateTypeName(), newAttributes);
181181

182182
_mainInterfaceMapper = DefineGenericArguments();
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
using System.Collections.Concurrent;
3+
using System.Reflection.Emit;
4+
5+
namespace Unity.Interception.Interceptors
6+
{
7+
public static class InterceptorClassGenerator
8+
{
9+
private static readonly ConcurrentDictionary<AssemblyBuilder, ModuleBuilder> ModuleByAssembly =
10+
new ConcurrentDictionary<AssemblyBuilder, ModuleBuilder>();
11+
12+
public static ModuleBuilder CreateModuleBuilder(AssemblyBuilder assemblyBuilder)
13+
{
14+
return ModuleByAssembly.GetOrAdd(assemblyBuilder, assembly =>
15+
{
16+
string moduleName = Guid.NewGuid().ToString("N");
17+
#if DEBUG_SAVE_GENERATED_ASSEMBLY
18+
return AssemblyBuilder.DefineDynamicModule(moduleName, moduleName + ".dll", true);
19+
#else
20+
return assembly.DefineDynamicModule(moduleName);
21+
#endif
22+
});
23+
}
24+
}
25+
}

src/Interceptors/TypeInterceptors/VirtualMethodInterception/InterceptingClassGeneration/InterceptingClassGenerator.Desktop.cs

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/Interceptors/TypeInterceptors/VirtualMethodInterception/InterceptingClassGeneration/InterceptingClassGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ private void CreateTypeBuilder()
214214

215215
Type baseClass = GetGenericType(_typeToIntercept);
216216

217-
ModuleBuilder moduleBuilder = InterceptingClassGenerator.GetModuleBuilder();
217+
ModuleBuilder moduleBuilder = InterceptorClassGenerator.CreateModuleBuilder(AssemblyBuilder);
218218
_typeBuilder = moduleBuilder.DefineType(
219219
"DynamicModule.ns.Wrapped_" + _typeToIntercept.Name + "_" + Guid.NewGuid().ToString("N"),
220220
newAttributes,

0 commit comments

Comments
 (0)