Пример #1
0
        /// <summary>
        /// Adds the given mixin to the given target type with a number of explicit dependencies and suppressed mixins. This is a shortcut
        /// method for calling <see cref="ForClass"/>, <see cref="ClassContextBuilder.AddMixin(System.Type,Remotion.Mixins.Context.MixinContextOrigin)"/>,
        /// <see cref="MixinContextBuilder.WithDependencies"/>, and <see cref="MixinContextBuilder.ReplaceMixins"/> in a row.
        /// </summary>
        /// <param name="mixinKind">The kind of relationship the mixin has with its target class.</param>
        /// <param name="targetType">The target type to add a mixin for.</param>
        /// <param name="mixinType">The mixin type to add.</param>
        /// <param name="introducedMemberVisibility">The default visibility to be used for introduced members.</param>
        /// <param name="explicitDependencies">The explicit dependencies of the mixin in the context of the target type.</param>
        /// <param name="suppressedMixins">The mixins suppressed by this mixin in the context of the target type.</param>
        /// <param name="origin">A <see cref="MixinContextOrigin"/> object describing where the mixin configuration originates from.</param>
        public virtual MixinConfigurationBuilder AddMixinToClass(
            MixinKind mixinKind,
            Type targetType,
            Type mixinType,
            MemberVisibility introducedMemberVisibility,
            IEnumerable <Type> explicitDependencies,
            IEnumerable <Type> suppressedMixins,
            MixinContextOrigin origin)
        {
            ArgumentUtility.CheckNotNull("targetType", targetType);
            ArgumentUtility.CheckNotNull("mixinType", mixinType);
            ArgumentUtility.CheckNotNull("explicitDependencies", explicitDependencies);
            ArgumentUtility.CheckNotNull("suppressedMixins", suppressedMixins);
            ArgumentUtility.CheckNotNull("origin", origin);

            MixinContextBuilder mixinContextBuilder = AddMixinToClass(targetType, mixinType, origin);

            mixinContextBuilder
            .OfKind(mixinKind)
            .WithDependencies(explicitDependencies.ToArray())
            .WithIntroducedMemberVisibility(introducedMemberVisibility)
            .ReplaceMixins(suppressedMixins.ToArray());

            return(this);
        }
Пример #2
0
 public override int GetHashCode()
 {
     return(TargetType.GetHashCode()
            ^ MixinType.GetHashCode()
            ^ MixinKind.GetHashCode()
            ^ base.GetHashCode());
 }
        public MixinDefinition(MixinKind mixinKind, Type type, TargetClassDefinition targetClass, bool acceptsAlphabeticOrdering)
            : base(type)
        {
            ArgumentUtility.CheckNotNull("targetClass", targetClass);

            _mixinKind   = mixinKind;
            _targetClass = targetClass;
            _acceptsAlphabeticOrdering = acceptsAlphabeticOrdering;
        }
Пример #4
0
 public static MixinContext Create(
     MixinKind mixinKind = MixinKind.Extending,
     Type mixinType      = null,
     MemberVisibility introducedMemberVisibility = MemberVisibility.Private,
     IEnumerable <Type> explicitDependencies     = null,
     MixinContextOrigin origin = null)
 {
     return(new MixinContext(
                mixinKind,
                mixinType ?? typeof(UnspecifiedType),
                introducedMemberVisibility,
                explicitDependencies ?? new[] { typeof(object), typeof(string) },
                origin ?? MixinContextOriginObjectMother.Create()));
 }
Пример #5
0
        public MixinConfigurationBuilder AddMixinToClass(
            MixinKind mixinKind,
            Type targetType,
            Type mixinType,
            MemberVisibility introducedMemberVisibility,
            IEnumerable <Type> explicitDependencies,
            IEnumerable <Type> suppressedMixins)
        {
            ArgumentUtility.CheckNotNull("targetType", targetType);
            ArgumentUtility.CheckNotNull("mixinType", mixinType);
            ArgumentUtility.CheckNotNull("explicitDependencies", explicitDependencies);
            ArgumentUtility.CheckNotNull("suppressedMixins", suppressedMixins);

            var origin = MixinContextOrigin.CreateForStackFrame(new StackFrame(1));

            return(AddMixinToClass(mixinKind, targetType, mixinType, introducedMemberVisibility, explicitDependencies, suppressedMixins, origin));
        }
Пример #6
0
        protected void Apply(
            MixinConfigurationBuilder configurationBuilder,
            MixinKind mixinKind,
            Type targetType,
            Type mixinType,
            MixinContextOrigin origin)
        {
            ArgumentUtility.CheckNotNull("targetType", targetType);
            ArgumentUtility.CheckNotNull("mixinType", mixinType);
            ArgumentUtility.CheckNotNull("origin", origin);

            try
            {
                configurationBuilder.AddMixinToClass(
                    mixinKind, targetType, mixinType, IntroducedMemberVisibility, AdditionalDependencies, SuppressedMixins, origin);
            }
            catch (Exception ex)
            {
                throw new ConfigurationException(ex.Message, ex);
            }
        }
Пример #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MixinContext"/> class.
        /// </summary>
        /// <param name="mixinKind">The kind of relationship the configured mixin has with its target class.</param>
        /// <param name="mixinType">The mixin type represented by this <see cref="MixinContext"/>.</param>
        /// <param name="introducedMemberVisibility">The default visbility of introduced members.</param>
        /// <param name="explicitDependencies">The explicit dependencies of the mixin.</param>
        /// <param name="origin">
        /// A description of where the <see cref="MixinContext"/> originates from. Note that <paramref name="origin"/> is not considered when comparing
        /// <see cref="MixinContext"/> objects for equality.
        /// </param>
        public MixinContext(
            MixinKind mixinKind,
            Type mixinType,
            MemberVisibility introducedMemberVisibility,
            IEnumerable <Type> explicitDependencies,
            MixinContextOrigin origin)
        {
            ArgumentUtility.CheckNotNull("mixinType", mixinType);
            ArgumentUtility.CheckNotNull("explicitDependencies", explicitDependencies);
            ArgumentUtility.CheckNotNull("origin", origin);

            _mixinType = mixinType;
            _mixinKind = mixinKind;
            _introducedMemberVisibility = introducedMemberVisibility;
            _explicitDependencies       = new HashSet <Type> (explicitDependencies).AsReadOnly();
            _origin = origin;

            _cachedHashCode = EqualityUtility.GetRotatedHashCode(
                _mixinKind,
                _mixinType,
                EqualityUtility.GetXorHashCode(ExplicitDependencies),
                IntroducedMemberVisibility);
        }
Пример #8
0
 public void AddMixinKind(MixinKind mixinKind)
 {
     _mixinKind = mixinKind;
 }
Пример #9
0
 public void AddMixinKind(MixinKind mixinKind)
 {
     _constructorArguments[0] = Expression.Constant(mixinKind);
 }
Пример #10
0
 public void AddMixinKind(MixinKind mixinKind)
 {
     SetValue(1, mixinKind);
 }