1

IoC の外部アセンブリである Ninject IoC アセンブリを使用しています。モノとウィンドウの両方をサポートしています。しかし、モノで作業するには、別のコンパイル済みバージョンのアセンブリが必要です。

次の問題があります。

Ninject Windows バージョンを使用する Domain.Core プロジェクトがあります。追加の 2 つのプロジェクトがあります。For.Mono および For.Windows と呼びます。両方とも Domain.Core プロジェクトへの参照があります。

問題は、Ninject が mono で動作するには、特別なコンパイル シンボルを使用してコンパイルする必要があることです。

現在、モノ バージョンは Windows では動作しません。同じソリューションで両方のバージョンを使用して次のような問題を解決するにはどうすればよいですか。

For.Mono プロジェクトを実行すると、Domain.Core プロジェクトがコード内のいくつかのクラスで Ninject を使用し、そのスコア Windows バージョンのローカルを参照している場合でも、Ninject の Mono バージョンのみが使用されます。どういうわけかMonoバージョン、

For.Windows プロジェクトで Ninject Windows バージョンを使用すると、この問題は問題なく機能するので些細なことですが、For.モノプロジェクト。コンパイラが正しいことは理解していますが、1 つのコードベースでクロスプラットフォーム サポートの問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

あなたの質問は正確ではありませんが、私が収集したものから:プロジェクトが使用するアセンブリで基本クラス/インターフェイスを共有しており、クラス/インターフェイスのプラットフォーム固有の実装を提供するDomain.Core2セットの派生クラス/インターフェイス (For.Windowsおよび) もあります。 . ソリューションから両方を参照したい。For.MonoDomain.CoreFor.XXX

そのアプローチに問題はありません。Domain.Coreコードがクラスのみを参照し、インスタンス化コードがラップされている限り

if (platform = Platform1) 
{
    // must be function calls in both branches to avoid JIT-ing references 
    // to unsupporterd DLL for the other platform.
    InstantiatePlatformOneClasses();
}
else
    InstantiatePlatformTwoClasses();

コンパイル時でも実行時でも問題はないはずです。

注: いくつかの DI コンテナーを使用すると、プラットフォーム固有の実装を実行時に選択するように構成するだけで、同じ問題を簡単に解決できます。

于 2012-08-20T22:29:13.757 に答える