Example #1
0
        public static Assembly CompileAll(Assembly assembly, IInjectionProvider injection)
        {
            return(cache.GetOrAdd(assembly.FullName, () =>
            {
                var assemblyName = string.Concat(assembly.GetName().Name, "_Dynamic");
                var assemblyBuilder = new DynamicAssemblyBuilder(assemblyName);

                assembly.GetExportedTypes()
                .Where(s => s.IsNotCompiled())
                .ForEach(s => EntityProxyBuilder.BuildType(s, null, assemblyBuilder, injection));

                return assemblyBuilder.AssemblyBuilder;
            }));
        }
Example #2
0
        private static Assembly GetAssemblyFromCache(Assembly assembly)
        {
            var lazy = new Lazy <Assembly>(() =>
            {
                var assemblyName    = string.Concat(assembly.GetName().Name, "_Dynamic");
                var assemblyBuilder = new DynamicAssemblyBuilder(assemblyName);

                assembly.GetExportedTypes()
                .Where(s => s.IsNotCompiled())
                .ForEach(s => EntityProxyBuilder.BuildType(s, null, assemblyBuilder));

                return(assemblyBuilder.AssemblyBuilder);
            });

            return(cache.GetOrAdd(assembly.FullName, t => lazy.Value));
        }
Example #3
0
        /// <summary>
        /// 编译程序集中的所有类型。
        /// </summary>
        /// <param name="contextType">当前上下文实例的类型。</param>
        /// <param name="assembly">当前的程序集。</param>
        /// <param name="types">指定需要编译的类型,如果为 null 则遍列 <paramref name="assembly"/> 中的所有可导出类型。</param>
        /// <param name="injection">用来向实体类中注入代码。</param>
        /// <returns></returns>
        public static Assembly CompileAll(Type contextType, Assembly assembly, Type[] types, IInjectionProvider injection)
        {
            var assemblyKey = new EntityAssemblyKey {
                ContextType = contextType, Assembly = assembly
            };

            return(_cache.GetOrAdd(assemblyKey, key =>
            {
                var rndNo = RandomGenerator.Create();
                var assemblyName = string.Concat(key.Assembly.GetName().Name, ".", rndNo);
                var assemblyBuilder = new DynamicAssemblyBuilder(assemblyName);

                types ??= key.Assembly.GetExportedTypes();

                types.Where(s => s.IsNotCompiled() && !s.IsSealed)
                .ForEach(s => EntityProxyBuilder.BuildType(s, null, assemblyBuilder, injection));

                return assemblyBuilder.AssemblyBuilder;
            }));
        }