2

プリズムのデスクトップライブラリを使用しています。

私が望むのは、モジュールをディレクトリに取得してから実行することです。

私はそれが好きです:

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()を試しました

4

3 に答える 3

2

あなたのコードは正しいように見えます。これを行うには、クラスのGetModuleCatalog()メソッドをオーバーライドする必要があるという印象を受けました。これは、modules ディレクトリからモジュールをロードBootstrapperする非常に単純な例です。Bootstrapper

public class Bootstrapper : UnityBootstrapper
{
    private const string MODULE_FOLDER = @".\modules";

    protected override IModuleCatalog GetModuleCatalog()
    {
        DirectoryModuleCatalog catalog = new DirectoryModuleCatalog() { ModulePath = MODULE_FOLDER };
        return catalog;
    }
}

アップデート

UnityBootstrapperブートストラップを使用せずにモジュールをロードすることはおそらく可能ですが、クラスを利用しない理由がわかりません。それはあなたのために働きます。

Bootstrapper bootStrapper = new Bootstrapper();
bootStrapper.Run();

モジュールがロードされます。非常に簡単なので、私自身、ブートストラップを使用せずにこれを行ったことはありません。

于 2010-09-27T15:50:11.097 に答える
1

jsmith が言ったように、デフォルトのブートストラッパーは、それ以外の場合は自分で実行する構成のための重い作業を提供します。シェルがない場合は、その部分をスキップするカスタム ブートストラップを作成するだけです。

どうしてもブートストラップを使用したくない場合は、ModuleManagerクラスをインスタンス化し、ModulesCatalog をパラメータの 1 つとして渡し、ModuleManager のRunメソッドを呼び出すことができます。

前に言ったように、上記はブートストラップによって行われます。これが役立つことを願っています。

ありがとう、ダミアン

于 2010-09-27T16:32:56.860 に答える
0

アプリケーションをどのようにブートストラップしていますか? ブートストラップ クラスを作成しましたか? すべてのモジュールを初期化するのはブートストラップです。

これは、私が作成したブートストラップ クラスの例です。

public class ApplicationBootstrapper : UnityBootstrapper
{
    // Here is where you create your module catalog
    protected override IModuleCatalog GetModuleCatalog()
    {
        DirectoryModuleCatalog catalog = new DirectoryModuleCatalog();
        catalog.ModulePath = @"C:\Users\Raph\Documents\Visual Studio 2010\Projects\LibraryLoad\LibraryLoad\Modules";

        return catalog;
    }

    // Here is where you create your user interface shell.
    protected override DependencyObject CreateShell()
    {
        Container.RegisterInstance<IApplicationSettings>(new ApplicationSettings());

        Shell shell = Container.Resolve<Shell>();

        if (shell != null)
            shell.Show();

        return shell;
    }

}

次に、App.xamlファイルのOnStartupでブートストラッパーを実行すると、すべてのモジュールで初期化が呼び出されます。

protected override void OnStartup(StartupEventArgs e)
{
    ApplicationBootstrapper bootstrapper = new ApplicationBootstrapper();
    bootstrapper.Run();
}

この例では、Unity ブートストラップを使用します。必要なのは、Prismと並行して利用できるUnity プラットフォームだけです。

于 2011-01-13T19:11:58.563 に答える