/// <summary>
 /// 订阅事件
 /// </summary>
 public void Subscribe(IDomainEventHandler handler)
 {
     lock (_handlers)
     {
         SafeAccessAttribute.CheckUp(handler);
         if (!_handlers.Contains(handler))
         {
             _handlers.Add(handler);
         }
     }
 }
Example #2
0
 public void AddHandler(IEventHandler handler)
 {
     lock (_handlers)
     {
         SafeAccessAttribute.CheckUp(handler);
         if (!_handlers.Contains(handler))
         {
             _handlers.Add(handler);
         }
     }
 }
Example #3
0
        public void CheckUp()
        {
            //检查InternalSafeClass,不会引起非并发访问安全的异常
            AssertPro.NotThrowsException <TypeUnsafeAccessException>(() =>
            {
                SafeAccessAttribute.CheckUp(typeof(SafeInternalClass));
            });

            //检查InternalUnsafeClass,会引起非并发访问安全的异常
            Assert.ThrowsException <TypeUnsafeAccessException>(() =>
            {
                SafeAccessAttribute.CheckUp(typeof(UnsafeInternalClass));
            });
        }
Example #4
0
        /// <summary>
        /// 获取服务,该方法不会缓存结果
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public static IServiceProvider GetServiceImpl(string serviceName)
        {
            RuntimeTypeHandle serviceHandle = default(RuntimeTypeHandle);

            if (_handlers.TryGetValue(serviceName, out serviceHandle))
            {
                var type = Type.GetTypeFromHandle(serviceHandle);
                SafeAccessAttribute.CheckUp(type);
                var service = Activator.CreateInstance(type) as IServiceProvider;
                if (service == null)
                {
                    throw new TypeMismatchException(type, typeof(IServiceProvider));
                }
                return(service);
            }
            return(null);
        }
Example #5
0
 /// <summary>
 /// ×¢²áµ¥Àý²Ö´¢£¬ÇëÈ·±£<paramref name="repository"/>Êǵ¥ÀýµÄ
 /// </summary>
 /// <typeparam name="TRepository"></typeparam>
 /// <param name="repository"></param>
 public static void RegisterHandler <Q, S>(string handlerKey, IModuleHandler <Q, S> handler)
     where Q : class
     where S : class
 {
     if (_singletons.ContainsKey(handlerKey))
     {
         throw new ModuleException("Öظ´×¢²áÄ£¿é´¦ÀíÆ÷" + handlerKey);
     }
     lock (_syncObject)
     {
         if (_singletons.ContainsKey(handlerKey))
         {
             throw new ModuleException("Öظ´×¢²áÄ£¿é´¦ÀíÆ÷" + handlerKey);
         }
         SafeAccessAttribute.CheckUp(handler.GetType());
         _singletons.Add(handlerKey, handler);
     }
 }
Example #6
0
        /// <summary>
        /// ×¢²áµ¥Àý²Ö´¢£¬ÇëÈ·±£<paramref name="repository"/>Êǵ¥ÀýµÄ
        /// </summary>
        /// <typeparam name="TRepository"></typeparam>
        /// <param name="repository"></param>
        public static void Register <TRepository>(object repository)
        {
            var interfaceType = typeof(TRepository);

            if (_singletons.ContainsKey(interfaceType))
            {
                throw new DomainDrivenException("Öظ´×¢²á²Ö´¢" + interfaceType.FullName);
            }
            lock (_syncObject)
            {
                if (_singletons.ContainsKey(interfaceType))
                {
                    throw new DomainDrivenException("Öظ´×¢²á²Ö´¢" + interfaceType.FullName);
                }
                if (!(repository is TRepository))
                {
                    throw new TypeMismatchException(repository.GetType(), interfaceType);
                }
                SafeAccessAttribute.CheckUp(repository);
                _singletons.Add(interfaceType, repository);
            }
        }
Example #7
0
 public WebGuard(Type guardType)
 {
     SafeAccessAttribute.CheckUp(guardType);
     _guard = _getGuard(guardType);
 }
Example #8
0
 /// <summary>
 /// 页面路由器,请保证<paramref name="router"/>是单例的
 /// </summary>
 /// <param name="router"></param>
 public static void RegisterRouter(IWebPageRouter router)
 {
     SafeAccessAttribute.CheckUp(router.GetType());
     _instance = router;
 }
 /// <summary>
 /// 注册服务提供者工厂,请保证<paramref name="factory"/>是线程安全的
 /// </summary>
 /// <param name="factory"></param>
 public static void Register(IServiceProviderFactory factory)
 {
     SafeAccessAttribute.CheckUp(factory);
     _factoryByRegister = factory;
 }
Example #10
0
 /// <summary>
 /// 移动端检测器,请保证<paramref name="detector"/>是单例的
 /// </summary>
 /// <param name="detector"></param>
 public static void RegisterDetector(IDeviceDetector detector)
 {
     SafeAccessAttribute.CheckUp(detector.GetType());
     _instance = detector;
 }
Example #11
0
 /// <summary>
 /// 页面路由器,请保证<paramref name="router"/>是单例的
 /// </summary>
 /// <param name="router"></param>
 public static void RegisterRoute(IModuleHandlerRouter router)
 {
     SafeAccessAttribute.CheckUp(router.GetType());
     _instance = router;
 }
Example #12
0
 /// <summary>
 /// 语言提供其,请保证<paramref name="prodiver"/>是单例的
 /// </summary>
 /// <param name="prodiver"></param>
 public static void Register(ILanguageProvider prodiver)
 {
     SafeAccessAttribute.CheckUp(prodiver.GetType());
     _instance = prodiver;
 }
Example #13
0
 /// <summary>
 /// 注册结果发送者
 /// </summary>
 /// <param name="router"></param>
 public static void RegisterSender(IResultSender sender)
 {
     SafeAccessAttribute.CheckUp(sender.GetType());
     _sender = sender;
 }
Example #14
0
 /// <summary>
 /// 注册参数提取者
 /// </summary>
 /// <param name="router"></param>
 public static void RegisterExtractor(IParameterExtractor extractor)
 {
     SafeAccessAttribute.CheckUp(extractor.GetType());
     _extractor = extractor;
 }