インターフェイスを宣言する「Core」というプロジェクトがあります。そして、そのインターフェイスを実装するクラスをインスタンス化する「サービス」というプロジェクトがあります(依存関係で「コア」プロジェクトを参照します)。
「コア」(EXE)を実行できるため、両方のプロジェクトは独立して実行されます。実行している場合は、「サービス」が実行されているかどうかを確認し、実行されている場合は、「サービス」プロセスで作成されたクラスのインスタンスを取得して、そのメソッドを呼び出します。
こんな感じです(ほぼ)。
「コア」プロジェクトで:
namespace Core
{
public interface IController { void Update(long ID, string Value, string Components); }
public static class Utils
{
public static IController Controller;
internal void Main(string[] args)
{
//Here, if "Service" is running, then get "Controller" from it
}
}
}
「サービス」プロジェクトで:
namespace Service
{
internal class ControlMe : Core.IController
{
public void Update(long ID, string Value, string Components)
{
//Do other things
}
internal void Main(string[] args)
{
Core.Utils.Controller = new ControlMe();
}
}
}
あるプロセスから別のプロセスに何らかの形でマーシャリングする必要がありますが、それを呼び出す相互運用メソッドには慣れていません。