using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page
{
public interface IMedia
{
void Play();
} public class MP3 : AudioMedia
{
public override void Play() //重写Play()
{
}
}
public class WAV : AudioMedia //重写Play()
{
public override void Play()
{
}
}
public abstract class AudioMedia : IMedia//AudioMedia只是一个抽象化概念,并没有实际的使用情况
{
public abstract void Play();
}
public abstract class VideoMedia : IMedia
{
public abstract void Play();
}
public class MediaPlay
{
//根据需要完成任务的单向分派
public void Play(IMedia media)
{
media.Play();
}
}
public interface IMediaFactory {
IMedia CreateMedia();
}
public class MP3Factory : IMediaFactory {
public IMedia CreateMedia() {
return new MP3();
}
} public class WAVFactory : IMediaFactory
{
public IMedia CreateMedia()
{
return new WAV();
}
}
protected void Page_Load(object sender, EventArgs e)
{
InitMediaType();
}
private void InitMediaType() {
DropDownList1.Items.Clear();
foreach(string key in ConfigurationSettings.AppSettings.AllKeys){
DropDownList1.Items.Add(key);
}
DropDownList1.SelectedIndex = 0;
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string mediaType = DropDownList1.SelectedItem.ToString().ToLower();
string factoryDllName = ConfigurationSettings.AppSettings[mediaType].ToString();
IMediaFactory factory = (IMediaFactory)Activator.CreateInstance("MediaLibrary", factoryDllName).Unwrap();//此句提示无法载入文档或组件,找不到MediaLibrary或其相依性的其中之一,系统找不到指定的文档
if (factory!=null)
{
IMedia media = factory.CreateMedia();
media.Play();
} }
}<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="请选择播放器:"></asp:Label>
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AppendDataBoundItems="True" AutoPostBack="True" OnTextChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem>mp3</asp:ListItem>
<asp:ListItem>wav</asp:ListItem>
</asp:DropDownList><br />
<asp:Label ID="msg" runat="server"></asp:Label></div>
</form>
</body>
</html>
我点下拉列表时就会出错,提示无法载入文档或组件,找不到MediaLibrary或其相依性的其中之一,系统找不到指定的文档.
可是factoryDllName 是可以取得值的,就是在MediaLibrary这句提示异常.
解决方案 »
- C# socket+多线程 和 异步socket编程的区别
- 关于子窗体操作父窗体控件的问题
- C# winform 中使用皮肤控件skinengine后,就不能设置窗体背景颜色了?
- 怎么在sql表里补上周末时间
- 高分求,关于ActiveReport for .net 出力Excel文件的问题~
- [高分高难度提问] 如何得知指定的窗体是否有 OwnedWindow
- 请问,用vb.net或者vc.net写的代码在C#中可以使用吗?
- 关于多线程中变量的改变问题
- 怎样把数据库中的内容显示在treeview 中?
- 怎样实现在一个窗体中控制另外一个窗体及其控件?
- 导入excel的奇怪问题
- <script 如何修改成C#
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="mp3" value="MediaLibrary.MP3Factory"/>
<add key="wav" value="MediaLibrary.WAVFactory"/>
</appSettings>
<connectionStrings/>
</configuration>