public static Type FinalType(this DataTemplate dataTemplate)
        {
            return(dataTemplate.Get(() =>
            {
                var dataType = (Type)dataTemplate.DataType;



                if (dataTemplate.GenericArgument() == null)
                {
                    return dataType;
                }
                if (dataTemplate.GenericArgumentInnerArgument() == null)
                {
                    return dataType.CreateGenericType(dataTemplate.GenericArgument());
                }

                return dataType.CreateGenericType(
                    dataTemplate.GenericArgument().CreateGenericType(
                        dataTemplate.GenericArgumentInnerArgument()));
            }));
        }