public void TypeAccessorBuilder_BuildSetterFromStringOnPrivateProperty()
        {
            var control = new PrivatePropertyObject("Peter");
            var experimental = new PrivatePropertyObject("Kyle");

            var builder = new TypeAccessorBuilder<PrivatePropertyObject>();
            var setter = builder.BuildSetter("Name");

            setter.SetterAction(ref experimental, "Peter");

            Assert.AreEqual(control.GetName(), experimental.GetName(), "Setter should assign the given value to the property.");
        }
        public void TypeAccessorBuilder_BuildSetterFromString()
        {
            var control = new SinglePropertyObject()
            {
                Id = 1
            };
            var experimental = new SinglePropertyObject()
            {
                Id = 1
            };

            var builder = new TypeAccessorBuilder<SinglePropertyObject>();
            var setter = builder.BuildSetter("Id");

            control.Id = 10;
            setter.SetterAction(ref experimental, 10);

            Assert.AreEqual(control.Id, experimental.Id, "Setter should assign the given value to the property.");
        }
示例#3
0
        public static TypeAccessor GetAccessor(Type originalType)
        {
            if (originalType == null)
            {
                throw new ArgumentNullException("originalType");
            }

            TypeAccessor accessor = (TypeAccessor)_accessors[originalType];

            if (accessor == null)
            {
                lock (_accessors.SyncRoot)
                {
                    accessor = (TypeAccessor)_accessors[originalType];

                    if (accessor == null)
                    {
                        if (IsAssociatedType(originalType))
                        {
                            return((TypeAccessor)_accessors[originalType]);
                        }

                        Type instanceType = IsClassBulderNeeded(originalType)? null: originalType;
                        Type accessorType = null;

                        if (_loadTypes)
                        {
                            Assembly originalAssembly = originalType.Assembly;
                            Assembly extensionAssembly;

                            if (_assemblies.Contains(originalAssembly))
                            {
                                extensionAssembly = (Assembly)_assemblies[originalAssembly];
                            }
                            else
                            {
                                extensionAssembly = LoadExtensionAssembly(originalAssembly);
                                _assemblies.Add(originalAssembly, extensionAssembly);
                            }

                            if (extensionAssembly != null)
                            {
                                if (instanceType == null)
                                {
                                    instanceType = extensionAssembly.GetType(
                                        AbstractClassBuilder.GetTypeName(originalType));
                                }

                                if (instanceType != null)
                                {
                                    accessorType = extensionAssembly.GetType(
                                        TypeAccessorBuilder.GetTypeAccessorClassName(instanceType));
                                }
                            }
                        }

                        if (accessorType == null)
                        {
                            if (instanceType == null)
                            {
                                instanceType = TypeFactory.GetType(originalType, new AbstractClassBuilder());
                            }

                            accessorType = TypeFactory.GetType(originalType, new TypeAccessorBuilder(instanceType, originalType));
                        }

                        accessor = (TypeAccessor)Activator.CreateInstance(accessorType);

                        _accessors[originalType] = accessor;

                        if (originalType != instanceType)
                        {
                            _accessors[instanceType] = accessor;
                        }
                    }
                }
            }

            return(accessor);
        }
        public void TypeAccessorBuilder_BuildGetterFromString()
        {
            var control = new SinglePropertyObject()
            {
                Id = 42
            };
            var experimental = new SinglePropertyObject()
            {
                Id = 42
            };

            var builder = new TypeAccessorBuilder<SinglePropertyObject>();
            var getter = builder.BuildGetter("Id");

            var controlResult = control.Id;
            var experimentalResult = getter(experimental);

            Assert.AreEqual(controlResult, experimentalResult, "Getter should return the value assigned to the property.");
        }
        public void TypeAccessorBuilder_BuildGetterFromStringOnPrivateProperty()
        {
            var experimental = new PrivatePropertyObject("Kyle");

            var builder = new TypeAccessorBuilder<PrivatePropertyObject>();
            var getter = builder.BuildGetter("Name");

            const string controlResult = "Kyle";
            var experimentalResult = getter(experimental);

            Assert.AreEqual(controlResult, experimentalResult, "Getter should return the value assigned to the property.");
        }