【发布时间】:2015-07-05 21:32:12
【问题描述】:
我正在使用 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>,即使是隐式的。有没有办法避免创建这个类?
【问题讨论】:
标签: c# interface dependency-injection xamarin