Ejemplo n.º 1
0
        public async Task Start <T>(string uri, WebSocketBuildOption options) where T : WebSocketHandler, new()
        {
            var listener = new HttpListener();

            listener.Prefixes.Add(uri);
            listener.Start();

            while (true)
            {
                var listenerContext = await listener.GetContextAsync();

                if (listenerContext.Request.IsWebSocketRequest)
                {
                    var socketContext = await listenerContext.AcceptWebSocketAsync(null, options.KeepAliveInterval);

                    using (var scope = ContainerUnity.GetContainer().CreateScope())
                    {
                        var acceptContext = new WebSocketAcceptContext(scope.ServiceProvider, socketContext.WebSocket, listenerContext.User, options);
                        await WebSocketHandler.Accept <T>(acceptContext);
                    }
                }
                else
                {
                    listenerContext.Response.StatusCode = 404;
                    listenerContext.Response.Close();
                }
            }
        }
Ejemplo n.º 2
0
        public void TestScope1_2()
        {
            var container = ContainerUnity.GetContainer();

            container.Register <ICClass>(p => new CClass2 {
                DClass = p.Resolve <IDClass>()
            }, Lifetime.Scoped);
            container.Register <IDClass>(p => new DClass(), Lifetime.Transient);

            using (var scope = container.CreateScope())
            {
                var c1 = scope.Resolve <ICClass>();
                var c2 = scope.Resolve <ICClass>();
                var d1 = scope.Resolve <IDClass>();
                var d2 = scope.Resolve <IDClass>();

                using (var scope1 = scope.CreateScope())
                {
                    var c11 = scope1.Resolve <ICClass>();
                    var c21 = scope1.Resolve <ICClass>();
                    var d11 = scope1.Resolve <IDClass>();
                    var d21 = scope1.Resolve <IDClass>();
                }
            }
        }
Ejemplo n.º 3
0
        public void TestSelf()
        {
            var container = ContainerUnity.GetContainer();
            var obj       = container.Resolve <BClass>();

            Assert.IsNotNull(obj);
        }
Ejemplo n.º 4
0
        public void GetContainerForDefault()
        {
            var container = ContainerUnity.GetContainer();

            Assert.IsFalse(container.GetRegistrations().IsNullOrEmpty());
            Assert.AreEqual(typeof(IocService1), container.Resolve <IIocService>().GetType());
        }
Ejemplo n.º 5
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            SerializeOption.GlobalConverters.Add(new LightEntityJsonConverter());

            services.AddFireasy(Configuration)
            .AddIoc(ContainerUnity.GetContainer())     //添加 appsettings.json 里的 ioc 配置
            .AddEntityContext <DbContext>(options =>
            {
                options.NotifyEvents = true;         //此项设为 true 时, 上面的实体持久化订阅通知才会触发
            });

            //注册实体持久化的订阅通知
            EntityPersistentSubscribeManager.AddSubscriber(subject => new EntitySubscriber().Accept(subject));

            services.AddMvc()
            .AddSessionStateTempDataProvider()
            .ConfigureFireasyMvc(options =>
            {
                //options.JsonSerializeOption.Converters.Add(new LightEntityJsonConverter());
            })
            .ConfigureEasyUI();

            services.AddSession()
            .AddSessionRevive <SessionReviveNotification>();

            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.LoginPath = new PathString("/login");
            });
        }
Ejemplo n.º 6
0
        public void GetContainerForNoneTest()
        {
            var container = ContainerUnity.GetContainer("none");

            Console.WriteLine(container.Options.AllowOverriding);

            Assert.IsNotNull(container);
        }
Ejemplo n.º 7
0
        public void RegisterSingletonForInstanceTest()
        {
            var key       = MethodBase.GetCurrentMethod().Name;
            var container = ContainerUnity.GetContainer(key);

            container.RegisterSingleton <IMainService>(new MainService());

            Assert.AreEqual(1, container.GetRegistrations().Count());
        }
Ejemplo n.º 8
0
        public void RegisterForTypeTest()
        {
            var key       = MethodBase.GetCurrentMethod().Name;
            var container = ContainerUnity.GetContainer(key);

            container.Register(typeof(IMainService), typeof(MainService));

            Assert.AreEqual(1, container.GetRegistrations().Count());
        }
Ejemplo n.º 9
0
        public void RegisterForFuncTest()
        {
            var key       = MethodBase.GetCurrentMethod().Name;
            var container = ContainerUnity.GetContainer(key);

            container.Register <IMainService>(() => new MainService());

            Assert.AreEqual(1, container.GetRegistrations().Count());
        }
Ejemplo n.º 10
0
        public void ResolveForTypeTest()
        {
            var key       = MethodBase.GetCurrentMethod().Name;
            var container = ContainerUnity.GetContainer(key);

            container.Register <IMainService, MainService>();

            Assert.IsNotNull(container.Resolve(typeof(IMainService)));
        }
Ejemplo n.º 11
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services
            .AddFireasy(Configuration)
            .AddIoc(ContainerUnity.GetContainer());

            services.AddControllersWithViews()
            .ConfigureFireasyMvc(s => { s.JsonSerializeOption.Converters.Add(new Fireasy.Data.Entity.LightEntityJsonConverter()); });
        }
Ejemplo n.º 12
0
        public void TestConfig()
        {
            //查找config目录下的 *.ioc.config 文件
            var path      = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config");
            var container = ContainerUnity.GetContainer(path, "*.ioc.xml");
            var service   = container.Resolve <IMainService>();

            Assert.IsNotNull(service);
        }
        /// <summary>
        /// 获取参数的值。
        /// </summary>
        /// <param name="controllerContext"></param>
        /// <param name="parameterDescriptor"></param>
        /// <returns></returns>
        protected override object GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor)
        {
            var type = parameterDescriptor.ParameterType.GetNonNullableType();

            if (type.IsPrimitive || type.IsEnum || type == typeof(string))
            {
                var value = controllerContext.HttpContext.Request.Params[parameterDescriptor.ParameterName];
                if (value == "null")
                {
                    return(null);
                }

                return(base.GetParameterValue(controllerContext, parameterDescriptor));
            }
            else
            {
                //对json进行反序列化,由于使用了基于 Fireasy AOP 的实体模型,所以必须使用 Fireasy 的反序列化方法
                var json = controllerContext.HttpContext.Request.Params[parameterDescriptor.ParameterName];
                if (!string.IsNullOrEmpty(json))
                {
                    try
                    {
                        var option = new JsonSerializeOption();

                        var globalconverters = GlobalSetting.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();
                        option.Converters.AddRange(globalconverters);

                        var serializer = ContainerUnity.GetContainer().TryGetService <ISerializer>(() => new JsonSerializer(option));
                        if (serializer is ITextSerializer txtSerializer)
                        {
                            return(txtSerializer.Deserialize(json, parameterDescriptor.ParameterType));
                        }
                        else
                        {
                            return(serializer.Deserialize(Encoding.UTF8.GetBytes(json), parameterDescriptor.ParameterType));
                        }
                    }
                    catch (Exception exp)
                    {
                        var logger = LoggerFactory.CreateLogger();
                        if (logger != null)
                        {
                            var message = string.Format("无法解析控制器 {0} 的方法 {1} 的参数 {2} 的值。\n\n数据为: {3}",
                                                        parameterDescriptor.ActionDescriptor.ControllerDescriptor.ControllerName,
                                                        parameterDescriptor.ActionDescriptor.ActionName,
                                                        parameterDescriptor.ParameterName,
                                                        json);

                            logger.Error(message, exp);
                        }
                    }
                }

                return(null);
            }
        }
Ejemplo n.º 14
0
        public void TestAssembly()
        {
            var container = ContainerUnity.GetContainer();

            container.RegisterAssembly(typeof(IocTest).Assembly);

            var obj = container.Resolve <IMainService>();

            Console.WriteLine(obj.GetType().Name);
        }
Ejemplo n.º 15
0
        public void GetRegistrationTest()
        {
            var key       = MethodBase.GetCurrentMethod().Name;
            var container = ContainerUnity.GetContainer(key);

            container.Register <IMainService, MainService>();

            Assert.IsNotNull(container.GetRegistration <IMainService>());
            Assert.IsNull(container.GetRegistration <ISubService>());
        }
Ejemplo n.º 16
0
        public void GetRegistrationsTest()
        {
            var key       = MethodBase.GetCurrentMethod().Name;
            var container = ContainerUnity.GetContainer(key);

            container.Register <IMainService, MainService>();
            container.Register <ISubService, SubService>();

            Assert.AreEqual(2, container.GetRegistrations().Count());
        }
Ejemplo n.º 17
0
        public void TestAssemblyName()
        {
            var container = ContainerUnity.GetContainer();

            container.RegisterAssembly("Fireasy.Common.Tests");

            var obj = container.Resolve <IMainService>();

            Console.WriteLine(obj.GetType().Name);
        }
Ejemplo n.º 18
0
        public void TestGeneric()
        {
            var container = ContainerUnity.GetContainer();

            container.Register <IGeneric <MainService>, Generic>();

            var obj = container.Resolve <IGeneric <MainService> >();

            Console.WriteLine(obj.Test());
        }
Ejemplo n.º 19
0
        /// <summary>
        /// 获取注册到数据库提供者的所有插件服务。
        /// </summary>
        /// <param name="provider">数据库提供者对象。</param>
        /// <returns></returns>
        public static IEnumerable <IProviderService> GetServices(this IProvider provider)
        {
            Guard.ArgumentNull(provider, "provider");

            var key       = provider.GetType().FullName;
            var container = ContainerUnity.GetContainer(key);

            return(container.GetRegistrations()
                   .Select(registration => registration.Resolve().As <IProviderService>())
                   .Where(service => service != null));
        }
Ejemplo n.º 20
0
        public void TestPropertyInjection()
        {
            var container = ContainerUnity.GetContainer();

            container.RegisterTransient <ICClass, CClass>();
            container.RegisterTransient <IDClass, DClass>();

            var c = container.Resolve <ICClass>();

            Assert.IsNotNull(c.DClass);
        }
Ejemplo n.º 21
0
        public void Test1()
        {
            var c1 = ContainerUnity.GetContainer("c1");
            var c2 = ContainerUnity.GetContainer("c2");

            var b1 = c1.Resolve <IBClass>();
            var b2 = c2.Resolve <IBClass>();

            Console.WriteLine(b1);
            Console.WriteLine(b2);
        }
Ejemplo n.º 22
0
        public void TestIgnoreInjectProperty()
        {
            var container = ContainerUnity.GetContainer();

            container.Register <ICClass, CClass>();
            container.Register <IDClass, DClass>();

            var c = container.Resolve <ICClass>();

            Assert.IsNull(c.D);
        }
Ejemplo n.º 23
0
        public void TestConstructorInjection()
        {
            var container = ContainerUnity.GetContainer();

            container.Register <IAClass, AClass>();
            container.Register <IBClass, BClass>();

            var a = container.Resolve <IAClass>();

            Assert.IsTrue(a.HasB);
        }
Ejemplo n.º 24
0
        public void TestInitializer()
        {
            var container = ContainerUnity.GetContainer();

            container.Register <IMainService, MainService>();
            container.RegisterInitializer <IMainService>(s => s.Name = "fireasy");

            var obj = container.Resolve <IMainService>();

            Assert.AreEqual("fireasy", obj.Name);
        }
Ejemplo n.º 25
0
        public void Test()
        {
            var container = ContainerUnity.GetContainer();

            container
            .Register <IMainService, MainService>()
            .Register(typeof(IMainService), typeof(MainServiceSecond));

            var obj = container.Resolve <IMainService>();

            Console.WriteLine(obj.GetType().Name);
        }
Ejemplo n.º 26
0
        /// <summary>
        /// 为数据库提供者注册一个插件服务。
        /// </summary>
        /// <param name="provider">数据库提供者对象。</param>
        /// <param name="providerService">插件服务的类型。</param>
        /// <param name="serviceType">插件的实现类型。</param>
        /// <param name="category">类别标识。</param>
        /// <returns></returns>
        public static IProvider RegisterService(this IProvider provider, Type providerService, Type serviceType, string category = null)
        {
            Guard.ArgumentNull(provider, "provider");
            Guard.ArgumentNull(providerService, "providerService");
            Guard.ArgumentNull(serviceType, "serviceType");

            var key       = string.Concat(provider.GetType().FullName, category);
            var container = ContainerUnity.GetContainer(key);

            container.RegisterSingleton(providerService, () => serviceType.New());
            return(provider);
        }
Ejemplo n.º 27
0
        public void ResolveForPropertyInjectTest()
        {
            var key       = MethodBase.GetCurrentMethod().Name;
            var container = ContainerUnity.GetContainer(key);

            container.Register <IMainService, MainService>();
            //container.Register<AA, BB>();

            var sub = container.Resolve <AA>();

            Console.WriteLine(sub.Main);
        }
Ejemplo n.º 28
0
        public void TestSigletonInjection()
        {
            var container = ContainerUnity.GetContainer();

            container.RegisterSingleton <IAClass, AClass>();
            container.RegisterSingleton <IBClass, BClass>();

            var a = container.Resolve <IAClass>();
            var b = container.Resolve <IBClass>();

            Assert.IsTrue((a as AClass).B == b);
        }
Ejemplo n.º 29
0
        public void TestEnumerableInjectionSingleton()
        {
            var container = ContainerUnity.GetContainer();

            container.RegisterSingleton <ICClass, CClass>();
            container.RegisterSingleton <ICClass, CClass2>();
            container.RegisterSingleton <IDClass, DClass1>();

            var obj = container.Resolve <IDClass>();

            Assert.IsTrue(obj != null);
        }
Ejemplo n.º 30
0
        public void TestAop()
        {
            var container = ContainerUnity.GetContainer();

            container
            .Register <IAopBase, AopImpl>()
            .Register <IAClass, AClass>();
            //.Register<IBClass, BClass>();

            var obj = container.Resolve <IAopBase>();

            obj.Test();
        }