Beispiel #1
0
        public void Test_KernelRegister11()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = new FromAssemblyDescriptor(context.Assembly, Classes.MyFilter);
            var result     = new BasedOnDescriptor(new List <Type> {
                typeof(AbpDbContext)
            }, descriptor, Classes.MyFilter);

            descriptor.Criterias.Add(result);
            var kernel = new DefaultKernel();

            foreach (var type in descriptor.GetTypes(kernel))
            {
                foreach (var criteria in descriptor.Criterias)
                {
                    if (criteria.TryRegister(type, kernel))
                    {
                        break;
                    }
                }
            }
        }
Beispiel #2
0
        public void Test_KernelRegister12()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = new FromAssemblyDescriptor(context.Assembly, Classes.MyFilter);
            var result     = new BasedOnDescriptor(new List <Type> {
                typeof(AbpDbContext)
            }, descriptor, Classes.MyFilter);

            descriptor.Criterias.Add(result);
            var kernel = new DefaultKernel();
            var types  = descriptor.GetTypes(kernel).ToList();

            foreach (var type in types)
            {
                foreach (var criteria in descriptor.Criterias)
                {
                    try
                    {
                        if (criteria.TryRegister(type, kernel))
                        {
                            break;
                        }
                    }
                    catch
                    {
                        Console.WriteLine(type.Assembly.FullName + @"---" + type.Name);
                        throw new NullReferenceException("aaa");
                    }
                }
            }
        }
Beispiel #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="services"></param>
        /// <param name="assembly"></param>
        /// <returns></returns>
        public static IServiceCollection RegisterAssemblyByConvention(this IServiceCollection services, Assembly assembly)
        {
            var context = new ConventionalRegistrationContext(assembly, services);

            GetOrCreateRegistrarList(services).ForEach(registrar => registrar.Register(context));
            return(services);
        }
 public void RegisterAssembly(ConventionalRegistrationContext context)
 {
     context.IocContainer.Register(
         Classes.FromAssembly(context.Assembly)
         .BasedOn <Controller>()
         .LifestyleTransient()
         );
 }
        public void Test_ConventionalRegistrationContext()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());

            Assert.IsNotNull(context);
        }
        public void Test_Register()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var result = BasedOnDescriptor(context);

            context.IocManager.IocContainer.Register(result);
        }
        public void Test_GetNameOrConnectionStringOrNull()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var connectionString = context.IocManager.GetNameOrConnectionStringOrNull();

            Assert.IsNull(connectionString);
        }
        public void Test_FromAssembly()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = Classes.FromAssembly(context.Assembly);

            Assert.IsNotNull(descriptor);
        }
        public void Test_KernelRegister3()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var result = BasedOnDescriptor(context);
            var kernel = new DefaultKernel();

            ((IRegistration)result).Register(kernel);
        }
Beispiel #10
0
        /// <summary>
        /// 通过程序集在通用注册规则下正式注册
        /// </summary>
        /// <param name="assembly"></param>
        public void RegisterAssemblyByConvention(Assembly assembly)
        {
            var context = new ConventionalRegistrationContext(assembly, this);

            foreach (var registerer in _conventionalRegistrars)
            {
                registerer.RegisterAssembly(context);
            }

            IocContainer.Install(FromAssembly.Instance(assembly));
        }
        public void Test_BasedOn()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = Classes.FromAssembly(context.Assembly).IncludeNonPublicTypes().BasedOn <AbpDbContext>();

            Assert.IsNotNull(descriptor);
            Assert.AreEqual(context.IocManager, LocalIocManager);
            Assert.IsNotNull(context.IocManager.IocContainer);
            Assert.IsNotNull(context.IocManager.IocContainer.Kernel);
        }
        public void Test_KernelRegister4()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = Classes.FromAssembly(context.Assembly);
            var result     = descriptor.BasedOn(new List <Type> {
                typeof(AbpDbContext)
            });
            var kernel = new DefaultKernel();

            ((IRegistration)result).Register(kernel);
        }
Beispiel #13
0
        /// <summary>
        /// Registers types of given assembly by all conventional registerers. See <see cref="AddConventionalRegisterer"/> method.
        /// </summary>
        /// <param name="assembly">Assembly to register</param>
        /// <param name="config">Additional configuration</param>
        public void RegisterAssemblyByConvention(Assembly assembly, ConventionalRegistrationConfig config)
        {
            var context = new ConventionalRegistrationContext(assembly, IocContainer, config);

            foreach (var registerer in _conventionalRegisterers)
            {
                registerer.RegisterAssembly(context);
            }

            if (config.InstallInstallers)
            {
                IocContainer.Install(FromAssembly.Instance(assembly));                
            }
        }
Beispiel #14
0
        /// <summary>
        ///     Registers types of given assembly by all conventional registrars. See <see cref="AddConventionalRegistrar" />
        ///     method.
        /// </summary>
        /// <param name="assembly">Assembly to register</param>
        /// <param name="config">Additional configuration</param>
        public void RegisterAssemblyByConvention(Assembly assembly, ConventionalRegistrationConfig config)
        {
            var context = new ConventionalRegistrationContext(assembly, this, config);

            if (config.InstallInstallers)
            {
                IocContainer.Install(FromAssembly.Instance(assembly));
            }

            foreach (var registerer in _conventionalRegistrars)
            {
                registerer.RegisterAssembly(context);
            }
        }
Beispiel #15
0
        public void Test_KernelRegister7()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = new FromAssemblyDescriptor(context.Assembly, Classes.MyFilter);
            var result     = new BasedOnDescriptor(new List <Type> {
                typeof(AbpDbContext)
            }, descriptor, Classes.MyFilter);
            var kernel = new DefaultKernel();

            Assert.AreEqual(result.FromDescriptor, descriptor);
            ((IRegistration)result).Register(kernel);
        }
        public void Test_LifestyleTransient()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor =
                Classes.FromAssembly(context.Assembly)
                .IncludeNonPublicTypes()
                .BasedOn <AbpDbContext>()
                .WithServiceSelf()
                .LifestyleTransient();

            Assert.IsNotNull(descriptor);
            Assert.IsNotNull(descriptor.WithService);
        }
Beispiel #17
0
        public void Test_KernelRegister13()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = new FromAssemblyDescriptor(context.Assembly, Classes.MyFilter);
            var result     = new BasedOnDescriptor(new List <Type> {
                typeof(AbpDbContext)
            }, descriptor, Classes.MyFilter);

            descriptor.Criterias.Add(result);
            var kernel = new DefaultKernel();

            result.TryRegister(typeof(MyDbContext), kernel);
        }
Beispiel #18
0
        public void Test_KernelRegister16()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = new FromAssemblyDescriptor(context.Assembly, Classes.MyFilter);
            var result     = new BasedOnDescriptor(new List <Type> {
                typeof(AbpDbContext)
            }, descriptor, Classes.MyFilter);

            descriptor.Criterias.Add(result);
            var kernel = new DefaultKernel();

            Type[] baseTypes;
            var    type = typeof(MyDbContext);

            Assert.IsTrue(result.Accepts(type, out baseTypes));
            Assert.AreEqual(baseTypes.Length, 1);
            var defaults = CastleComponentAttribute.GetDefaultsFor(type);

            Assert.IsNotNull(defaults);
            var serviceTypes = result.WithService.GetServices(type, baseTypes);

            Assert.AreEqual(serviceTypes.Count, 0);
            Assert.AreEqual(defaults.Services.Length, 1);
            serviceTypes = defaults.Services;
            Assert.AreEqual(serviceTypes.ElementAt(0), typeof(MyDbContext));
            var registration = Component.For(serviceTypes);

            registration.ImplementedBy(type);
            result.Configuration?.Invoke(registration);
            Assert.IsNull(registration.Name);
            Assert.IsNull(defaults.Name);
            registration.RegisterOptionally();

            var token    = kernel.OptimizeDependencyResolution();
            var services = registration.FilterServices(kernel);

            Assert.AreEqual(services.Length, 1);
            Assert.AreEqual(services[0], typeof(MyDbContext));
            var builder            = kernel.ComponentModelBuilder;
            var customContributors = registration.GetContributors(services);
            var componentModel     = builder.BuildModel(customContributors);

            token?.Dispose();
        }
        private static BasedOnDescriptor BasedOnDescriptor(ConventionalRegistrationContext context)
        {
            var descriptor =
                Classes.FromAssembly(context.Assembly)
                .IncludeNonPublicTypes()
                .BasedOn <AbpDbContext>()
                .WithServiceSelf()
                .LifestyleTransient();
            var result = descriptor.Configure(c => c.DynamicParameters(
                                                  (kernel, dynamicParams) =>
            {
                var connectionString = context.IocManager.GetNameOrConnectionStringOrNull();
                if (!string.IsNullOrWhiteSpace(connectionString))
                {
                    dynamicParams["nameOrConnectionString"] = connectionString;
                }
            }));

            return(result);
        }
        public void Test_Configure()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor =
                Classes.FromAssembly(context.Assembly)
                .IncludeNonPublicTypes()
                .BasedOn <AbpDbContext>()
                .WithServiceSelf()
                .LifestyleTransient();
            var result = descriptor.Configure(c => c.DynamicParameters(
                                                  (kernel, dynamicParams) =>
            {
                var connectionString = context.IocManager.GetNameOrConnectionStringOrNull();
                if (!string.IsNullOrWhiteSpace(connectionString))
                {
                    dynamicParams["nameOrConnectionString"] = connectionString;
                }
            }));

            Assert.IsNotNull(result);
        }
Beispiel #21
0
        public void Test_KernelRegister17()
        {
            var context = new ConventionalRegistrationContext(
                Assembly.GetExecutingAssembly(),
                LocalIocManager,
                new ConventionalRegistrationConfig());
            var descriptor = new FromAssemblyDescriptor(context.Assembly, Classes.MyFilter);
            var result     = new BasedOnDescriptor(new List <Type> {
                typeof(AbpDbContext)
            }, descriptor, Classes.MyFilter);

            descriptor.Criterias.Add(result);
            var kernel = new DefaultKernel();

            Type[] baseTypes;
            var    type = typeof(MyDbContext);

            Assert.IsTrue(result.Accepts(type, out baseTypes));
            Assert.AreEqual(baseTypes.Length, 1);
            Assert.AreEqual(baseTypes[0].Name, "AbpDbContext");
            var defaults = CastleComponentAttribute.GetDefaultsFor(type);

            Assert.IsNotNull(defaults);
            var serviceTypes = result.WithService.GetServices(type, baseTypes);

            Assert.AreEqual(serviceTypes.Count, 0);
            Assert.AreEqual(defaults.Services.Length, 1);
            serviceTypes = defaults.Services;
            Assert.AreEqual(serviceTypes.ElementAt(0), typeof(MyDbContext));
            var registration = Component.For(serviceTypes);

            registration.ImplementedBy(type);
            result.Configuration?.Invoke(registration);
            Assert.IsNull(registration.Name);
            Assert.IsNull(defaults.Name);
            registration.RegisterOptionally();

            var token    = kernel.OptimizeDependencyResolution();
            var services = registration.FilterServices(kernel);

            Assert.AreEqual(services.Length, 1);
            Assert.AreEqual(services[0], typeof(MyDbContext));
            var builder            = kernel.ComponentModelBuilder;
            var customContributors = registration.GetContributors(services);
            var model = new ComponentModel();

            Array.ForEach(customContributors, c => c.BuildComponentModel(kernel, model));
            Assert.AreEqual(builder.Contributors.Length, 11);
            Assert.AreEqual(customContributors.Length, 2);
            foreach (var construction in builder.Contributors)
            {
                if (construction is PropertiesDependenciesModelInspector)
                {
                    var targetType = model.Implementation;
                    Assert.AreEqual(model.InspectionBehavior, PropertiesInspectionBehavior.Undefined);
                    model.InspectionBehavior =
                        (construction as PropertiesDependenciesModelInspector)
                        .GetInspectionBehaviorFromTheConfiguration(model.Configuration);
                    Assert.AreEqual(model.InspectionBehavior, PropertiesInspectionBehavior.All);
                    var bindingFlags = BindingFlags.Public | BindingFlags.Instance;
                    var properties   = targetType.GetProperties(bindingFlags);
                    Assert.AreEqual(properties.Length, 7);

                    foreach (var property in properties)
                    {
                        Console.WriteLine(property.Name);
                        try
                        {
                            var canWrite = property.CanWrite;
                        }
                        catch
                        {
                            Console.WriteLine(@"CanWrite Fail, Construction:{0}, Property{1}", construction, property);
                        }
                        try
                        {
                            var parameters = property.GetIndexParameters();
                        }
                        catch
                        {
                            throw new NullReferenceException(@"GetIndexParameters Fail:" + property.Name);
                        }
                        try
                        {
                            var hasAttribute = property.HasAttribute <DoNotWireAttribute>();
                        }
                        catch
                        {
                            Console.WriteLine(@"HasAttribute Fail, Construction:{0}, Property{1}", construction, property);
                        }
                    }
                    break;
                }
            }
            token?.Dispose();
        }