public ProxyBuilder(ProxyKey key) { parentType = key.ParentType; interfaceTypes = new Type[] { key.InterfaceType }; }
public Type EnsureProxy(Type interfaceType, Type parentType) { if (parentType == null) { throw new ArgumentNullException(nameof(parentType)); } if (interfaceType == null) { throw new ArgumentNullException(nameof(interfaceType)); } var key = new ProxyKey { InterfaceType = interfaceType, ParentType = parentType, }; lock (threadLock) { if (proxyTypeCache.TryGetValue(key, out var proxyType) == false) { proxyTypeCache[key] = proxyType = CreateProxy(key); } return(proxyType); } }
private Type CreateProxy(ProxyKey key) { var builder = new ProxyBuilder(key); return(builder.Build(moduleBuilder)); }