我计划将各种工具箱项目转换为各种NuGet软件包。这个想法是使用services.AddMvc()
风格的依赖项注入(我不确定它叫什么)。我们称之为 ConfigureServices模式。
简而言之,该想法是允许如下使用库:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// ...
services.AddSomeLibrary(/* potential configuration here */);
// ...
}
public void Configure(IApplicationBuilder application)
{
// ...
application.UseSomeLibrary(); // If necessary
// ...
}
问题1:是否存在将连接字符串之类的东西用作
AddSomeLibrary()
扩展方法的首选方法?
当OuterLibrary依赖于InnerLibrary时,还会遇到另一个挑战,而这又需要一些配置-假设是一个连接字符串。
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// AddOuterLibrary's implementation will call AddInnerLibrary(...)
// Are we going to ask for InnerLibrary's configuration input here?
services.AddOuterLibrary(...);
}
问题2::
AddOuterLibrary()
应该如何获得调用AddInnerLibrary()
所需的配置输入?
特别是,我认为某些配置选项在不知道它们配置哪个子库的情况下可能看起来非常模糊。
也许答案可以使用外部库的示例,具体取决于日志记录库。日志记录库将需要使用一种特定类型的记录器(一种记录器记录到ElasticSearch,一种记录器记录到MySql,...)和一个连接字符串(仅对特定的特定记录器类型有意义)。
然后,我们的应用程序甚至可能还会由第三个库直接使用InnerLibrary。
问题3::当一个库添加另一个库时,它应该使用主服务集合,即使用与应用程序其余部分相同的容器实例,还是应该使用自己的单独容器实例?
我想如果我们使用主容器,那么以下是正确的: