作为我的应用程序的一部分,我有一个.Net Core API项目。与此项目作为自己的进程运行的大多数情况不同,我打算让API在一个线程中运行,其中包括一个进程。这样做的原因是API充当Web界面,在与本地控制台界面相同的级别上运行。两个接口共享一个单独的对象并对其执行操作(异步)。至少那是计划。但是,我遇到了一个问题。
我有这个Startup.cs
用于API:
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
this.Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{.
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseMvc();
}
}
..这是默认的一些小改动,这个方法用于启动API:
public static void Run()
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
我无法弄清楚如何将我的实例化对象传递给Startup
,以便我可以将其注册为单例并使其与控制器一起使用。
有办法做到这一点吗?如果没有,那么我可以采取其他方法吗?
答案 0 :(得分:1)
创建对象并在StartupServices
中将其注册为单身者有什么问题?
services.AddSingleton<ISingleton>(new MySingleton());
services.AddSingleton(new MySingleton());
或者您可以提供Func
来使创建变得懒惰并提供依赖关系:
services.AddSingleton(provider =>
{
var fooDependency = provider.GetService<FooDependency>();
return new MySingleton(fooDependency);
});
或者您可以将对象创建委托给工厂类(也是懒惰的):
services.AddSingleton(provider => provider.GetService<MyFactory>().CreateMySingleton());