1

ASP.Net MVC でプラグ アンド プレイ フレームワークの開発に取り組んでいます。これにより、メイン プロジェクトとは別のプロジェクトとしてモジュールを定義できます。したがって、開発者は必要な数のモジュールを作成できます。

私が必要としているのは、そのようなモジュールの設定を更新できることです。そのために、メイン プロジェクトでは、いくつかの一般的な設定の基本クラスを定義し、各モジュールには独自のカスタム設定があります。モジュールに編集がある場合、メイン プロジェクトでそのモジュールのインスタンスをインスタンス化する必要があります。ただし、メイン プロジェクトにはモジュールに関する知識がありません。

どうすればこれを達成できますか?

ありがとう!

4

2 に答える 2

1

必要に応じて、インターフェイスに依存するソリューションを作成する必要があります。

基本的に、アプリケーションは IModule と呼ばれるインターフェイスを使用して API dll を公開します。IModule には、Run() というメソッドが 1 つあります。メイン アプリケーションは、モジュールのアセンブリを読み込み、IModule を実装するものを探し、それらのオブジェクトの 1 つを作成し、それに対して Run() を呼び出します。

これは、サンドボックスをホストして内部でモジュールを実行する方法を説明する古い記事です。 http://msdn.microsoft.com/en-us/magazine/cc163701.aspx

namespace MyApplication.Api 
{
    public interface IModule
    { 
       void Run();
    }
}

開発者はこのようなものを作成します

public class MyObject : MarshalByRefObject, IModule
{
    public void Run()
    {
        // do something here    
    }
}

アプリケーションは、ある種のリフレクションでそれをロードします。

public void LoadModule()
{
     var asm = System.Reflection.Assembly.Load(/* Get the developer module name from somewhere*/);
     var types = asm.GetExportedTypes();
     foreach(var t in types)
     {
         foreach(var i = t.GetInterfaces())
         {
             if(i == typeof(IModule))
             {
                 var iModule = System.Activator.CreateInstance(t);
                 iModule.Run();
             }
         }
     }
}

別の appDomain でコードを実行するのが最善ですが、複雑さが増します。

public void LoadModuleInAppDomain()
{
    // Spin up a new AppDomain

    // Load the assembly into the app domain

    // Get the object

    // Call the Run Method

}
于 2012-06-04T18:57:48.963 に答える
1

依存性注入を使用して、これらのモジュールをアプリケーションのコンポジション ルートに注入できます。構成に従って、コードまたは xml (構成ファイル) を使用できます。本当に必要なものに応じて、自動配線、遅延バインディングなどを行うことができます。

各モジュールにイニシャライザを設定することもできるので、モジュールを登録するたびに、登録されたモジュールを初期化し、依存関係を注入する必要があります。

于 2012-06-04T18:59:57.590 に答える