2016-11-24 7 views
1

私のアプリケーションはプラグインをサポートしています。インターフェイスとコードを含むプロジェクトPluginUtilsがあります。このプロジェクトは、アプリケーションと各プラグインに含まれています。プラグインのインターフェイスファイルはどこに置くのですか?

問題は、1つのインターフェイスでカスタムプロジェクトが記述されていますが、PluginUtilsはすべてのプラグインタイプでカスタムプロジェクトを必要とすることです。私はMyClassが含まれている名前空間を参照することからIPluginSendを実装するプラグインを防ぐことができますどのように

namespace PluginUtils 
{ 
    public interface IPluginSend 
    { 
     [Description("Send an email")] 
     void SendEmail(string subject, string body, List<string> attachments, List<string> toAddresses); 
    } 

    public interface IPluginSave 
    { 
     [Description("Save data")] 
     string SaveData(List<MyClass> data, string resultsPath); 
    } 
} 

編集

アーロンの答えが鍵となりました。いくつかの依存関係を変更する必要がありました。PluginUtilsには、MyClassの名前空間への参照は含まれていませんが、MyClassは現在PluginUtilsを参照しています。

+0

「MyClass」は契約の一部ではありません。実装者がそれを必要としない場合、インタフェースはなぜそれを言いますか? –

答えて

1

依存関係を逆転させてください。代わりに、外部プロジェクトの具体的なクラスのインターフェイスを使用するように依存インターフェイスを変更後のMyClassが実装できるPluginUtilsプロジェクトでintefaceを(例えばIMyClass)

public class MyClass : IMyClass 

を作成します。

+0

この回答は、「MyClass」が何であるかというシステムの性質をかなり前提としています。私たちが知っている限りでは、インターフェースは汎用的でなければならないし、「MyClass」の依存関係は単純に悪い構成になる可能性がある。 –

関連する問題