View Full Version : 插件中如何实现自己的配置界面,内详。


boyyao
03-01-2007, 07:46 AM
为了让自己的软件有“插件”功能。我用如下方法实现:
首先在主程序中定义一个DALFactory 类。用reflection创建调用的接口:
如下:
public class DALFactory
{
public static IDAL.IAddData Create()
{
string path = Properties.Settings.Default.AddDAL;
string className = path + ".AddMovie";
return
(IDAL.IAddData)Assembly.Load(path).CreateInstance(className);
}
}
同时创建一个项目IDAL 里面放一个接口类:如下
public interface IAddData
{
bool AddData(ref Entities.EntityLayer el);//Entities.EntityLayer 是传递的实体,不用理会
}


然后就是创建插件(实现接口的项目)了。

比如创建一个 AddMovieToAccess的项目
里面创建一个AddMovie的类。类中实现IDAL.IAddData接口。

以上这些都没问题。一直运行正常。

现在的问题是。我想在AddMovieToAccess项目中创建一个窗体。然后让主程序来显示这个窗体。做一些这个插件自身的配置工作。应该如何做?
假设AddMovieToAccess中有一个Config的窗体类。我应该怎么样在主程序中调用,并且显示他?

gx
03-02-2007, 05:20 AM
您好:
可以入下实现:设MyForm为AddMovieToAccess project 中的窗口类,在主程序中加载该程序集并显示窗口即可。
Assembly ass = Assembly.LoadFrom("AddMovieToAccess assembly name");
object obj = ass.CreateInstance("NameSpace.MyForm");
((Form)obj).Show();



郭轩
在线技术支持工程师
微软全球技术支持中心
---------------------------------------------------------------------------------------
我们的服务时间:周一至周五9:00-18:00(节假日除外)。我们将在两个工作日(48小时)内提供初始回应,并和您一起研究并解决问题。更多微软新闻组技术支持信息,请访问:http://support.microsoft.com/gp/newsgroupsupport/zh-cn.

回帖时,请在您的新闻组阅读器中使用“回复组(Reply to Group)”,这将帮助其他用户从您的提问中获益
---------------------------------------------------------------------------------------
本贴子以”现状”提供且没有任何担保,同时也没有授予任何权利。


"boyyao" <boyyao@hotmail.com> wrote in message
news:CEAD0185-033A-4AEE-B505-2A3F18F85812@microsoft.com...
> 为了让自己的软件有“插件”功能。我用如下方法实现:
> 首先在主程序中定义一个DALFactory 类。用reflection创建调用的接口:
> 如下:
> public class DALFactory
> {
> public static IDAL.IAddData Create()
> {
> string path = Properties.Settings.Default.AddDAL;
> string className = path + ".AddMovie";
> return
> (IDAL.IAddData)Assembly.Load(path).CreateInstance(className);
> }
> }
> 同时创建一个项目IDAL 里面放一个接口类:如下
> public interface IAddData
> {
> bool AddData(ref Entities.EntityLayer el);//Entities.EntityLayer 是传递的实体,不用理会
> }
>
>
> 然后就是创建插件(实现接口的项目)了。
>
> 比如创建一个 AddMovieToAccess的项目
> 里面创建一个AddMovie的类。类中实现IDAL.IAddData接口。
>
> 以上这些都没问题。一直运行正常。
>
> 现在的问题是。我想在AddMovieToAccess项目中创建一个窗体。然后让主程序来显示这个窗体。做一些这个插件自身的配置工作。应该如何做?
> 假设AddMovieToAccess中有一个Config的窗体类。我应该怎么样在主程序中调用,并且显示他?
>
>

boyyao
03-02-2007, 01:53 PM
谢谢。问题解决了。另外问一个问题。
为什么这里的assembly.loadfrom需要指定.dll的扩展名?
我在前面给出的例子中不需要加上.dll扩展名
"gx" <t-xguo@microsoft.com> 写入消息
news:%23aR0AqIXHHA.2256@TK2MSFTNGP02.phx.gbl...
> 您好:
> 可以入下实现:设MyForm为AddMovieToAccess project 中的窗口类,在主程序中加载该程序集并显示窗口即可。
> Assembly ass = Assembly.LoadFrom("AddMovieToAccess assembly name");
> object obj = ass.CreateInstance("NameSpace.MyForm");
> ((Form)obj).Show();
>
>
>
> 郭轩
> 在线技术支持工程师
> 微软全球技术支持中心
> ---------------------------------------------------------------------------------------
> 我们的服务时间:周一至周五9:00-18:00(节假日除外)。我们将在两个工作日(48小时)内提供初始回应,并和您一起研究并解决问题。更多微软新闻组技术支持信息,请访问:http://support.microsoft.com/gp/newsgroupsupport/zh-cn.
>
> 回帖时,请在您的新闻组阅读器中使用“回复组(Reply to Group)”,这将帮助其他用户从您的提问中获益
> ---------------------------------------------------------------------------------------
> 本贴子以”现状”提供且没有任何担保,同时也没有授予任何权利。
>
>
> "boyyao" <boyyao@hotmail.com> wrote in message
> news:CEAD0185-033A-4AEE-B505-2A3F18F85812@microsoft.com...
>> 为了让自己的软件有“插件”功能。我用如下方法实现:
>> 首先在主程序中定义一个DALFactory 类。用reflection创建调用的接口:
>> 如下:
>> public class DALFactory
>> {
>> public static IDAL.IAddData Create()
>> {
>> string path = Properties.Settings.Default.AddDAL;
>> string className = path + ".AddMovie";
>> return
>> (IDAL.IAddData)Assembly.Load(path).CreateInstance(className);
>> }
>> }
>> 同时创建一个项目IDAL 里面放一个接口类:如下
>> public interface IAddData
>> {
>> bool AddData(ref Entities.EntityLayer el);//Entities.EntityLayer
>> 是传递的实体,不用理会
>> }
>>
>>
>> 然后就是创建插件(实现接口的项目)了。
>>
>> 比如创建一个 AddMovieToAccess的项目
>> 里面创建一个AddMovie的类。类中实现IDAL.IAddData接口。
>>
>> 以上这些都没问题。一直运行正常。
>>
>> 现在的问题是。我想在AddMovieToAccess项目中创建一个窗体。然后让主程序来显示这个窗体。做一些这个插件自身的配置工作。应该如何做?
>> 假设AddMovieToAccess中有一个Config的窗体类。我应该怎么样在主程序中调用,并且显示他?
>>
>>
>
>

t-xguo@prcvap.microsoft.com
03-05-2007, 02:03 AM
您好:
为了便于大家的交流和学习,请把新的问题重开一贴,谢谢您的合作。

郭轩
在线技术支持工程师
微软全球技术支持中心
---------------------------------------------------------------------------------------
我们的服务时间:周一至周五9:00-18:00(节假日除外)。我们将在两个工作日(48小时)内提供初始回应,并和您一起研究并解决问题。更多微软新闻组技术支持信息,请访问:http://support.microsoft.com/gp/newsgroupsupport/zh-cn.

回帖时,请在您的新闻组阅读器中使用“回复组(Reply to Group)”,这将帮助其他用户从您的提问中获益
---------------------------------------------------------------------------------------
本贴子以”现状”提供且没有任何担保,同时也没有授予任何权利。

boyyao
04-02-2007, 08:30 AM
谢谢你的回复。我的问题已经解决了。
<t-xguo@prcvap.microsoft.com> wrote in message
news:61ea2446-d12d-4d71-803a-28d0d91446b7@ms.shabap01.publicpsswebcat...
> 您好:
> 为了便于大家的交流和学习,请把新的问题重开一贴,谢谢您的合作。
>
> 郭轩
> 在线技术支持工程师
> 微软全球技术支持中心
> ---------------------------------------------------------------------------------------
> 我们的服务时间:周一至周五9:00-18:00(节假日除外)。我们将在两个工作日(48小时)内提供初始回应,并和您一起研究并解决问题。更多微软新闻组技术支持信息,请访问:http://support.microsoft.com/gp/newsgroupsupport/zh-cn.
>
> 回帖时,请在您的新闻组阅读器中使用“回复组(Reply to Group)”,这将帮助其他用户从您的提问中获益
> ---------------------------------------------------------------------------------------
> 本贴子以”现状”提供且没有任何担保,同时也没有授予任何权利。