我正在尝试在我的代码中实现一些提供程序。现在,提供商可以是不同类型。例如,提供者可以获取URL,读取一些xml并使用给定的解析器作为组件解析它。解析器可以是xml解析器,json解析器或将来的其他解析器。读者可以从给定的URL读取或者可以从文件中读取等等。
我正在使用.net core 2.0和依赖注入来实现这一目标。到目前为止,我编写了以下代码。
设置相关性
var serviceProvider = new ServiceCollection()
.AddLogging()
.AddSingleton<App>()
.AddSingleton<IProviderService, ProviderService>()
.AddScoped<IFileReader, FileReader>()
.AddScoped<IWebReader, WebReader>()
.BuildServiceProvider();
提供商类
public class Provider: IProvider
{
private IReader reader;
public Provider(IReader reader)
{
this.reader = reader;
}
public string Start()
{
return reader.Read();
}
}
提供商服务
public class ProviderService : IProviderService
{
private readonly IWebReader webReader;
private readonly IFileReader fileReader;
public ProviderService(IWebReader webReader, IFileReader fileReader)
{
this.webReader = webReader;
this.fileReader = fileReader;
}
public List<IProvider> GetProviders()
{
return new List<IProvider>() {
new Provider(webReader),
new Provider(fileReader),
new Provider(webReader)
};
}
}
读者界面
public interface IReader
{
string Read();
}
文件阅读器
public interface IFileReader : IReader
{}
public class FileReader : IFileReader
{
public string Read()
{
return "Got data from file (txt)";
}
}
网络阅读器
public interface IWebReader : IReader
{}
public class WebReader : IWebReader
{
public string Read()
{
return "Got data from web (www)";
}
}
应用
public class App
{
private readonly IProviderService providerService;
public App(IProviderService providerService)
{
this.providerService = providerService;
}
public void Start()
{
var providerList = providerService.GetProviders();
providerList.ForEach((provider) =>
{
Console.WriteLine(provider.Start());
});
Console.ReadLine();
}
}
现在我可以更改提供程序中的阅读器,我将在阅读器中以相同的方式实现解析器。但是我需要将url传递给Web阅读器,例如文件路径到文件阅读器。并且特定读者可以有其他属性。我怎样才能将它们发送给读者?我确定我做错了但我无法弄清楚我的错误。你能救我吗?