我正在使用Xamarin开发移动应用程序。目前该应用程序仅适用于iOS,但计划是扩展到其他平台。出于这个原因,我有一个包含应用程序主要功能的可移植类库(PCL),以及一个包含特定于平台的实现的iOS部分。我正在使用依赖注入的控制反转,以针对PCL中包含的接口(例如)对平台项目中的实际实现进行编码。
实际问题是现在我需要在公共部分使用ConcurrentQueue
,但这在PCL中是不可用的,所以我在PCL中使用依赖注入以下方式:
public class A
{
...
public IConcurrentQueue<T> ConcurrentQueue
{
get;
set;
}
...
}
public interface IConcurrentQueue<T>
{
void Enqueue(T item);
bool TryDequeue(out T result);
int Count { get; }
IEnumerator<T> GetEnumerator();
}
在平台特定代码中我有:
public class Fake<T> : ConcurrentQueue<T>, IConcurrentQueue<T>
{
//ugly
}
...
A.ConcurrentQueue = new Fake<ActualType>();
它有效,但对我而言,仅仅为了使用控制反转来声明一个“假”类似乎有点难看。事实上,ConcurrentQueue<T>
实际上已经实现了IConcurrentQueue<T>
,即使是隐含的。有没有办法避免创建这个类?
答案 0 :(得分:0)
虽然这肯定是一种可能的情况,但如果您的许多代码都会使用PCL中无法使用的功能,那么您可以使用“共享代码”#39;样式项目代替获得全部功能,同时仍然实现您正在寻找的重用。