在C#中实现Xamarin项目中的库类型接口

时间:2015-04-27 12:19:43

标签: c# interface dependency-injection xamarin

我正在使用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>,即使是隐含的。有没有办法避免创建这个类?

1 个答案:

答案 0 :(得分:0)

虽然这肯定是一种可能的情况,但如果您的许多代码都会使用PCL中无法使用的功能,那么您可以使用“共享代码”#39;样式项目代替获得全部功能,同时仍然实现您正在寻找的重用。