Ejemplo n.º 1
0
        public T GetDefault(Characteristics characteristics, string template = null)
        {
            template = template ?? DefaultTemplateName;

            if (characteristics == null)
            {
                throw new InvalidOperationException("Can't have a null characteristics; use Characteristics.None");
            }

            //check for characteristics
            if (!CharacteristicsTransitionMethods.ContainsKey(characteristics))
            {
                throw new Exception($"unknown characteristics:{characteristics}");
            }

            if (!Defaults.ContainsKey(characteristics))
            {
                Defaults.Add(characteristics, new Dictionary <string, Lazy <T> >());
            }

            if (!Defaults[characteristics].ContainsKey(template))
            {
                //initialize
                Func <T> factory = () =>
                {
                    var ret = ObjectFactory.CreateInstance <T>();
                    if (TemplateManager == null && template != null)
                    {
                        throw new NullReferenceException("No template manager was provided");
                    }

                    if (template == DefaultTemplateName)
                    {
                        TemplateManager?.ApplyTemplate(ret);
                    }
                    else
                    {
                        TemplateManager?.ApplyTemplate(ret, template);
                    }

                    DecorateNewItem(ret);
                    CharacteristicsTransitionMethods[characteristics](ret);
                    return(ret);
                };
                Defaults[characteristics].Add(template, new Lazy <T>(factory));
            }

            return(Defaults[characteristics][template].Value);
        }
Ejemplo n.º 2
0
 public void InitializeCharacteristicsTransition(Func <T, T> defaultFactory, Characteristics characteristics)
 {
     if (!CharacteristicsTransitionMethods.ContainsKey(characteristics))
     {
         CharacteristicsTransitionMethods.Add(characteristics, defaultFactory);
     }
     else
     {
         throw new Exception($"there is already a default for characteristics:{characteristics}");
     }
 }