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); }