Exemplo n.º 1
0
        public void RegisterService(object service, bool isOverride)
        {
            var originalAsmName       = new AssemblyName("NTSock" + service.GetType().FullName);
            var assemblyBuilderHelper = new AssemblyBuilderHelper(originalAsmName.Name + ".dll");

            servicesLock.EnterWriteLock();
            try
            {
                var serviceType = service.GetType();
                var methods     = serviceType.GetMethods();
                if (methods != null)
                {
                    for (var i = 0; i < methods.Length; i++)
                    {
                        var method = methods[i];
                        if (method.GetCustomAttributes(typeof(ServiceMethodAttribute), false).Length == 0)
                        {
                            continue;
                        }
                        var executor = ExecutorFactory.CreateExecutor(service, method, i, assemblyBuilderHelper);
                        if (methodMaps.ContainsKey(executor.ExecutorKey))
                        {
                            if (!isOverride)
                            {
                                throw new ArgumentException("Cannot override an existing service.");
                            }
                            methodMaps.Remove(executor.ExecutorKey);
                        }
                        methodMaps.Add(executor.ExecutorKey, executor);
                    }
                    ExecutorFactory.CreateProxy(service, assemblyBuilderHelper);
                }
#if DEBUG
                assemblyBuilderHelper.Save();
#endif
            }
            finally
            {
                servicesLock.ExitWriteLock();
            }
        }