通过使用接口删除对nuget包的依赖?

时间:2019-01-30 00:49:14

标签: c# dependencies nuget

我正在构建一个新的NuGet包,以供多个应用程序使用。该程序包完成了大量工作,并完成了一些JSON工作,因此最初我使用newtonsoft.json程序包。但是,我发现我公司内部工作的许多应用程序使用不同版本的newtonsoft.json,或者它们使用不同的库进行JSON工作。

要消除对newtonsoft.json的依赖,我创建了一个需要由用户实现的接口。它有一个看起来像这样的类:

public interface IJsonConverter
{
    // this function needs to convert the object to a JSON string
    string SerializeObject(object data);

    // this function returns an object for the supplied JSON string
    T DeserializeObject<T>(string value);
}

每个应用可以很容易地实现,例如:

public class JsonConverter:IJsonConverter
{
    public string SerializeObject(object data)
    {
        return JsonConvert.SerializeObject(data);
    }
    public T DeserializeObject<T>(string value)
    {
        return JsonConvert.DeserializeObject<T>(value);
    }
}

这意味着每个使用我的nuget软件包的应用程序都不必担心这种依赖性,也不必弄乱绑定重定向或陷入DLL地狱。

这种方法会导致更多问题吗?是反模式吗?有没有更好的方法?

1 个答案:

答案 0 :(得分:1)

Rocklan,您正在创建一个抽象。通常,抽象要比实现好。如果这意味着有人必须担心实现,就可以了,但是我认为抽象对上游有好处,这意味着您可以在其他任何地方引用您的抽象。

但是具体的实现方式确实很重要,因为我认为例如套管已被翻转。

实际上大多数人都在使用Newtonsoft.Json,但是版本到处都是,所以不要让我开始使用Azure Functions和那个lib:)