예제 #1
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();
        }
예제 #2
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();
        }