//SqlNewsProvider.cs
该函数下面的这句语句有问题
List<NewsItem> list = List<NewsItem>();
应该改成
List<NewsItem> list = new List<NewsItem>();
该函数下面的这句语句有问题
List<NewsItem> list = List<NewsItem>();
应该改成
List<NewsItem> list = new List<NewsItem>();
{
List<NewsItem> list = List<NewsItem>();
=====================
list没有被实例化
{
List <NewsItem> list = List <NewsItem> ();
=====================
list没有被实例化
这种情况在编译时应该有警告吧
{
private static NewsProvider provider; public static NewsProvider Provider
{
return provider;
} public static List<NewsItem> GetNews(string categoryId)
{
return provider.GetNews(categoryId);
}
}
这个类中,provider变量没有被初始化,你没有一个工厂类来创建一个Provider子类来付给该provider,并且该类结构中provider是不能被外部访问的。
private static NewsProvider provider;
private staitc SmallBusinessDataProviderSection providerSection;public static NewsProvider Provider
{
get{
Initialize();
return provider;
}
}private static void Initialize()
{
if (!isInitialized)
{
providerSection = (ConfigurationManager.GetSection("SmallBusinessDataProvider")) as SmallBusinessDataProviderSecion;
if (providerSection == null)
{
throw new InvalisOperationException();
} provider = ProviderHelper.InstantiateProvider(providerSection.NewsProvider[providerSection.NewsProvider], typeof(NewsProvider)) as NewsProvider;
if (provider == null)
{
throw new InvalidOperationException();
}
isInitialized = true;
}
}我不懂微软的这个Initialize()有什么意思。
public static class News
{
private static NewsProvider provider; public static NewsProvider Provider
{
get
{
return provider;
}
set
{
provider = value;
}
} public static List<NewsItem> GetNews(string categoryId)
{
if( provider == null )
{
throw new Exception("No Instance is Created!");
}
return provider.GetNews(categoryId);
}
}
public partial class Control_NewsList : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EvenArgs e)
{
if (!Page.IsPostBack)
{
News.Provider = new SqlNewsProvider();
List<NewsItem> news = News.GetNews(CategoryId);
this.NewsListGridView.DataSource = news;
this.NewsListGridView.DataBind();
}
} private string categoryId;
public string CategoryId
{
get {return categoryId; }
set { categoryId = value;}
}
}
这样就不会出现你说的情况,不过如果你不赋值,就会抛出异常的.
这句话初始化了provider变量。这是一个典型的单例模式,好好跟踪一下程序吧,
注意isInitialized的值,和provider的值(这个值是一个引用)