File: System.Activities.Presentation\System\Activities\Presentation\FeatureManager.cs
Project: ndp\cdf\src\NetFx40\Tools\System.Activities.Presentation.csproj (System.Activities.Presentation)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.Activities.Presentation
{
    using System.Collections.Generic;
    using System.Activities.Presentation.Internal.PropertyEditing;
    using System.Runtime;
 
    class FeatureManager
    {
        EditingContext context;
 
        HashSet<Type> initializedTypes;
 
        public FeatureManager(EditingContext context)
        {
            this.context = context;
            initializedTypes = new HashSet<Type>();
        }
 
        public void InitializeFeature(Type modelType)
        {
            Fx.Assert(modelType != null, "Why would anyone initialize a feature that is not associated with a type");
 
            if (!initializedTypes.Contains(modelType))
            {
                initializedTypes.Add(modelType);
                foreach (FeatureAttribute featureAttribute in ExtensibilityAccessor.GetAttributes<FeatureAttribute>(modelType))
                {
                    if (typeof(Feature).IsAssignableFrom(featureAttribute.Type))
                    {
                        Feature feature = (Feature)Activator.CreateInstance(featureAttribute.Type);
                        if (feature != null)
                        {
                            feature.Initialize(this.context, modelType);
                        }
                    }
                }
                if (modelType.IsGenericType)
                {
                    InitializeFeature(modelType.GetGenericTypeDefinition());
                }
            }
        }
    }
}