在编辑器中使用 MEF
我正在尝试开发像 VS 编辑器这样的编辑器,其中我拥有 FTP、TelNet 等组件(在设计器中拖放并将它们相互连接,更改 PropertyGrid 中的属性等),然后执行。最好使用 MEF 扫描所有具有 IComponent 接口的 dll-s,然后使用反射从 dll-s 获取原始对象。示例
[Export(typeof(ICOmponent))]
[MetadataExport("Name", "FTP")]
public class FTP : ICOmponent
{
public string Server { get; set; }
public void Start()
{
....ConectTOServer(Server);
}
}
[Export(typeof(ICOmponent))]
[MetadataExport("Name", "MessageBox")]
public class MessageBox : ICOmponent
{
public string Message { get; set; }
public void Start()
{
System.Windows.Forms.MessageBox.Show(Message);
}
}
public interface ICOmponent
{
void Start();
}
或者是另一种从 IComponent 中获取原始对象的方法,就像从元数据中获取原始对象一样。因为 PropertyGrid 需要用于显示 FTP 服务器和来自 MessageBox 消息的属性的真实对象。 抱歉我的英语不好。
Im trying to developing editor like VS editor where i hawe components like FTP, TelNet (where you drag and drop in designer and connect them with each other change properties in PropertyGrid and so on) and then execute. Is good idea to use MEF to scan all dll-s that have interface IComponent and then use reflection to get the original Object from dll-s. example
[Export(typeof(ICOmponent))]
[MetadataExport("Name", "FTP")]
public class FTP : ICOmponent
{
public string Server { get; set; }
public void Start()
{
....ConectTOServer(Server);
}
}
[Export(typeof(ICOmponent))]
[MetadataExport("Name", "MessageBox")]
public class MessageBox : ICOmponent
{
public string Message { get; set; }
public void Start()
{
System.Windows.Forms.MessageBox.Show(Message);
}
}
public interface ICOmponent
{
void Start();
}
Or is another method to get original object from MEF from ICOmponent like from Metadata.. because PropertyGrid nead real object for displaying properties for FTP Server and From MessageBox Message.
Sorry for my bad english.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为了使
MEF
正常工作,放置在应用程序上的任何程序集/dll 都必须实现Exports
。如果没有,您将无法导入
任何内容。要使用没有任何导出的程序集/dll,请使用反射来搜索实现
IComponent
的类型。并使用 Activator 类根据其类型信息创建实例。For
MEF
to work, any assembly/dll that is dropped on you application must implementExports
. If it does not, you won't be able toImport
anything.To work with assembly/dll that does not have any exports, use reflection to search for types that implement
IComponent
. And useActivator
class to create instances from their type information.