C# 访问ConfigureServices中的IApplicationEnvironment
在我的C# 访问ConfigureServices中的IApplicationEnvironment,c#,asp.net-core,C#,Asp.net Core,在我的ConfigureServices方法中,我想读取一个文件(在我的例子中,是一个用于签名令牌的证书,但它可以是设置服务所需的任何文件)。因此,我需要从iaapplicationenvironment了解ApplicationBasePath 目前,我通过如下方式获得iaapplicationenvironment服务来解决问题: public void ConfigureServices(IServiceCollection services) { ... string b
ConfigureServices
方法中,我想读取一个文件(在我的例子中,是一个用于签名令牌的证书,但它可以是设置服务所需的任何文件)。因此,我需要从iaapplicationenvironment
了解ApplicationBasePath
目前,我通过如下方式获得iaapplicationenvironment
服务来解决问题:
public void ConfigureServices(IServiceCollection services)
{
...
string basePath;
var serviceProvider = services.BuildServiceProvider();
try
{
basePath = serviceProvider.GetRequiredService<IApplicationEnvironment>().ApplicationBasePath;
}
finally
{
(serviceProvider as IDisposable)?.Dispose();
}
...
}
public void配置服务(IServiceCollection服务)
{
...
字符串基路径;
var serviceProvider=services.BuildServiceProvider();
尝试
{
basePath=serviceProvider.GetRequiredService().ApplicationBasePath;
}
最后
{
(serviceProvider作为IDisposable)?.Dispose();
}
...
}
这种方法有效,但我不确定这是否是正确的方法。因此,我的问题是:
ConfigureServices
中是否有更好的读取文件的方法ConfigureServices
中是否有更好的方法获取应用程序基本路径IDisposable
运行时允许在
启动
类的构造函数中注入依赖项:
public class Startup
{
private readonly IApplicationEnvironment _appEnv;
public Startup(IApplicationEnvironment appEnv)
{
_appEnv = appEnv;
}
public void ConfigureServices(IServiceCollection services)
{
string basePath = _appEnv.ApplicationBasePath;
}
}
如何在DNX 1.0.0-rc1-15996发布后获取IApplicationEnvironment实例
要获取对iaapplicationviroment
接口实现者的引用,可以使用PlatformServices.Default.Application
以下示例在项目的Startup.cs文件的上下文中显示了这一点:
using Microsoft.Extensions.PlatformAbstractions;
namespace MyWebApp
{
public class Startup
{
private IApplicationEnvironment _appEnv { get; set; }
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false);
if (env.IsDevelopment())
{
// For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
// obtain IApplicationEnvironment instance
_appEnv = PlatformServices.Default.Application;
}
...
以下行显示如何使用该实例获取应用程序的基本路径:
string basepath = _appEnv.ApplicationBasePath
参考资料:
为什么不直接从
PlatformServices.Default.Application.ApplicationBasePath
分配路径呢?正如名称Default
所暗示的那样(这不是一个规则,因为Current
也在这里和那里使用),它是PlatformServices
类型的静态成员
部门的更多信息。
除了Default
,类型为ApplicationEnvironment
的Application
是该类公开的唯一属性。这是合理的,因为ApplicationEnvironment
只是封装了一些关于正在运行的应用程序(或应用程序,不管它们可能有多少)的信息。同样重要的是,类的默认构造函数是private
。闻起来像单身汉,是吗
显然,实现者的决定是改变对应用程序环境的看法:它不提供任何服务,它是一个共享信息。使用它的唯一方法是上面的方法
还有更多…
iaapplicationenvironment
神奇地消失了,这又是因为ApplicationEnvironment
不是一种预期为不同的操作系统提供或重新实现的服务,也许从现在开始,ApplicationEnvironment
就什么也没有实现<很好强>