public GridViewExtension GridView(Action <LOSGridSettings> method) { Action <LOSGridSettings> tmpMethod = (Action <LOSGridSettings>)method.Clone(); var tmpInstance = new LOSGridSettings(); tmpInstance.Columns.IsInit = true; method.Invoke(tmpInstance); if (tmpInstance.DataSource == null || !tmpInstance.DataSource.GetType().IsGenericType) { throw new InvalidOperationException("Cannot bind data source without generic type"); } var modelType = tmpInstance.DataSource.GetType().GetGenericArguments()[0]; var settingInstance = new LOSGridSettings(ModelExtensionsHelper.GetModelMetadataForModel(modelType), HtmlHelper.ViewContext); tmpMethod?.Invoke(settingInstance); var gridView = new GridViewExtension(settingInstance, HtmlHelper.ViewContext); gridView = gridView.Bind(settingInstance.DataSource); return(gridView); }