1

我正在使用 Ninject IoC 程序集 - IoC 的外部程序集,它们支持单声道和窗口。但是要在单声道上工作,需要不同的编译版本的程序集。

我有以下问题:

我有一个使用 Ninject windows 版本的 Domain.Core 项目我有两个额外的项目 - 称它们为 For.Mono 和 For.Windows,它们都有 Domain.Core 项目的参考

问题是为了让 Ninject 在单声道上工作,我们必须使用特殊的编译符号对其进行编译。

现在单声道版本无法在 Windows 上运行,我怎样才能解决在同一解决方案中使用两个版本的问题以具有以下内容:

当我运行 For.Mono 项目时,仅使用 Ninject 的 Mono 版本,即使 Domain.Core 项目在其代码中的某些类中使用 Ninject 并引用本地到它的分数 windows 版本 - 我想用Mono版本不知何故,

并在 For.Windows 项目上使用 Ninject windows 版本,这个问题很简单,因为它可以正常工作,但是当我在我的 For 中使用 Domain.Core 中的代码时,编译器要求我引用 windows 版本的第一个请求。单声道项目。我知道编译器是对的,但是我怎样才能用一个代码库解决这个跨平台支持问题

4

1 回答 1

0

您的问题并不完全清楚,但据我所知:您在Domain.Core项目使用的程序集中共享了基类/接口,您还有 2 组派生类/接口(For.WindowsFor.Mono),它们提供平台特定的类/接口实现Domain.Core. 您希望For.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 回答