【发布时间】:2018-07-06 02:51:52
【问题描述】:
我正在努力为我正在制作的网络库提出正确的设计。该库是作为 .NET 标准项目编写的,它需要通过 IOptions 进行配置(期望一些可执行文件来提供这些依赖项)
我正在阅读this answer,这是我一直遵循的指南。然而,我的困惑是某些应用程序应该如何使用该库。
例如,我有一个名为Packet.cs 的类需要一些配置。
public class Packet {
public Packet(int maxSize) {
...
}
}
假设maxSize 是可以通过appsettings.js 配置的东西。我写了另一个名为 NetworkService.cs 的类,它采用 IOptions :
public class NetworkService {
public NetworkService(IOptions<Settings> settings) {
// save the settings
}
public Packet NewPacket() {
return new Packet(settings.maxSize);
}
}
现在,在这一点上,我是否假设任何想要使用我的库的东西都必须通过NetworkService,因为它是唯一具有设置的类?这是推荐的设计吗,我只有一个接口到整个库,所有调用都必须经过它?
【问题讨论】:
-
我不太清楚这种方法会出现什么问题。你能添加一些例子来说明你不喜欢它吗?
-
我猜你正在寻找单例模式
-
否 - 任何想要使用您的库的东西都需要包含 Options 库并在其类构造函数中包含 IOptions
,就像您在 NetworkService 构造函数中一样。我还将向您的网络库添加一个 ServiceCollectionExtensions 类,该类带有一个名为 ConfigureNetworking() 的方法或任何您调用库的方法 - 您将在其中将您的 Settings 对象绑定到 Configuration ==> services.Configure (Configuration.GetSection( "YourNetworkSettingsSection")) -
只是为了完整 - 添加到我之前的评论 - 应用程序 Startup.ConfigureServices 应该调用您的 ConfigureNetworking() 方法(例如 services.ConfigureNetworking(Configuration)。
-
@mdebeus 谢谢你的意见。我想你指的是asp.net?我正在编写一个不包含
Startup类的.NET 标准库。但是,我确实写了一篇类似的文章,基本上就像你在评论中提到的那样工作。