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(); }
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(); }