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这句提示异常.