/// <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); }
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; }
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())); }
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)); }
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); } }
/// <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); }
public void AddMixinKind(MixinKind mixinKind) { _mixinKind = mixinKind; }
public void AddMixinKind(MixinKind mixinKind) { _constructorArguments[0] = Expression.Constant(mixinKind); }
public void AddMixinKind(MixinKind mixinKind) { SetValue(1, mixinKind); }