Ejemplo n.º 1
0
        public static MutableType Create(
            Type baseType                  = null,
            string name                    = "MyMutableType",
            string @namespace              = "MyNamespace",
            TypeAttributes attributes      = TypeAttributes.Public | TypeAttributes.BeforeFieldInit,
            MutableType declaringType      = null,
            IMemberSelector memberSelector = null,
            IInterfaceMappingComputer interfaceMappingComputer = null,
            IMutableMemberFactory mutableMemberFactory         = null,
            bool copyCtorsFromBase = false)
        {
            baseType = baseType ?? typeof(UnspecifiedType);
            // Declaring type stays null.

            memberSelector           = memberSelector ?? new MemberSelector(new BindingFlagsEvaluator());
            interfaceMappingComputer = interfaceMappingComputer ?? new InterfaceMappingComputer();
            mutableMemberFactory     = mutableMemberFactory ?? new MutableMemberFactory(new RelatedMethodFinder());

            var mutableType = new MutableType(declaringType, baseType, name, @namespace, attributes, interfaceMappingComputer, mutableMemberFactory);

            mutableType.SetMemberSelector(memberSelector);

            if (copyCtorsFromBase)
            {
                CopyConstructors(baseType, mutableType);
            }

            return(mutableType);
        }
Ejemplo n.º 2
0
        public MutableType(
            MutableType declaringType,
            Type baseType,
            string name,
            string @namespace,
            TypeAttributes attributes,
            IInterfaceMappingComputer interfaceMappingComputer,
            IMutableMemberFactory mutableMemberFactory)
            : base(name, @namespace, attributes, null, EmptyTypes)
        {
            // Base type may be null (for interfaces).
            // Declaring type may be null.
            ArgumentUtility.CheckNotNull("interfaceMappingComputer", interfaceMappingComputer);
            ArgumentUtility.CheckNotNull("mutableMemberFactory", mutableMemberFactory);

            SetDeclaringType(declaringType);
            SetBaseType(baseType);

            _interfaceMappingComputer = interfaceMappingComputer;
            _mutableMemberFactory     = mutableMemberFactory;

            _allMethods = GetAllBaseMethods(baseType);

            _allMethodsIndex = new Dictionary <MethodInfo, int>();
            for (int index = 0; index < _allMethods.Count; index++)
            {
                _allMethodsIndex.Add(MethodBaseDefinitionCache.GetBaseDefinition(_allMethods[index]), index);
            }

            _baseDefinitionsOfAbstractMethods = GetBaseDefinitionsOfAbstractMethods(baseType);
        }
Ejemplo n.º 3
0
        public void SetUp()
        {
            _memberSelectorMock           = MockRepository.GenerateStrictMock <IMemberSelector>();
            _interfaceMappingComputerMock = MockRepository.GenerateStrictMock <IInterfaceMappingComputer>();
            _mutableMemberFactoryMock     = MockRepository.GenerateStrictMock <IMutableMemberFactory>();

            _mutableType = MutableTypeObjectMother.Create(
                name: "MyAbcType",
                baseType: typeof(DomainType),
                memberSelector: _memberSelectorMock,
                interfaceMappingComputer: _interfaceMappingComputerMock,
                mutableMemberFactory: _mutableMemberFactoryMock);

            _mutableTypeWithoutMocks = MutableTypeObjectMother.Create(baseType: typeof(DomainType));
        }
Ejemplo n.º 4
0
        public static MutableType CreateInterface(
            string name                                        = "MyMutableInterface",
            string @namespace                                  = "MyNamespace",
            TypeAttributes attributes                          = TypeAttributes.Public | TypeAttributes.Interface | TypeAttributes.Abstract,
            MutableType declaringType                          = null,
            IMemberSelector memberSelector                     = null,
            IRelatedMethodFinder relatedMethodFinder           = null,
            IInterfaceMappingComputer interfaceMappingComputer = null,
            IMutableMemberFactory mutableMemberFactory         = null)
        {
            // Declaring type stays null.

            memberSelector           = memberSelector ?? new MemberSelector(new BindingFlagsEvaluator());
            relatedMethodFinder      = relatedMethodFinder ?? new RelatedMethodFinder();
            interfaceMappingComputer = interfaceMappingComputer ?? new InterfaceMappingComputer();
            mutableMemberFactory     = mutableMemberFactory ?? new MutableMemberFactory(relatedMethodFinder);
            Assertion.IsTrue(attributes.IsSet(TypeAttributes.Interface | TypeAttributes.Abstract));

            var mutableType = new MutableType(declaringType, null, name, @namespace, attributes, interfaceMappingComputer, mutableMemberFactory);

            mutableType.SetMemberSelector(memberSelector);

            return(mutableType);
        }