我正在使用 prism 的桌面库。
我想要的是在目录中获取模块,然后运行它们。
我确实喜欢这样:
DirectoryModuleCatalog catalog = new DirectoryModuleCatalog();
catalog.ModulePath = @"C:\Users\Raph\Documents\Visual Studio 2010\Projects\LibraryLoad\LibraryLoad\Modules";
我检查过,模块已加载到目录中。 模块示例:
public class SendEmailClass : IModule
{
public void SendEmail()
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("**", "moi");
mail.Subject = "Report"; //manage generated subject
mail.To.Add("***");
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com");
smtp.Port = 57;
smtp.EnableSsl = true; //depending of the smtp server
NetworkCredential cred = new NetworkCredential("***", "***");
smtp.Credentials = cred;
smtp.Send(mail);
}
public void Initialize()
{
SendEmail();
}
}
但是我想运行它们(启动它们的Initialize()),但我找不到它。我想运行整个目录。有人有主意吗?我尝试过catalog.Initialize()、catalog.Validate() 或catalog.Load()
最佳答案
您的代码看起来正确,我的印象是您必须重写 Bootstrapper
类中的 GetModuleCatalog()
方法才能执行此操作。这是一个非常简单的 Bootstrapper
的工作示例,它从模块目录加载模块。
public class Bootstrapper : UnityBootstrapper
{
private const string MODULE_FOLDER = @".\modules";
protected override IModuleCatalog GetModuleCatalog()
{
DirectoryModuleCatalog catalog = new DirectoryModuleCatalog() { ModulePath = MODULE_FOLDER };
return catalog;
}
}
更新
可能可以不使用 Bootstrap 并加载模块,但我不明白为什么您不利用 UnityBootstrapper
类,它会为您完成工作。
Bootstrapper bootStrapper = new Bootstrapper();
bootStrapper.Run();
您的模块将被加载。我自己从来没有在不使用 Bootstrap 的情况下这样做过,因为它非常简单。
关于wpf - 运行目录的所有模块( Prism ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3805420/