public static T AsDecorator <T>(this T source) where T : class
        {
            //if (source is IDecorate<T>)
            //    return source;
            T result = source;
            Func <IDecorate <T> > builder = Actor.Public.GetContractDecoratorBuilder <T>();

            if (builder.IsNotNull())
            {
                IDecorate <T> decorator = builder();
                decorator.InitDecorator(result);
                if (decorator is T)
                {
                    result = decorator as T;
                }
            }
            return(result);
        }