如何在 MVC .NET C# 应用程序外部和内部使用 C# 对象
How to have a C# object available outside and inside an MVC .NET C# application
我有一个 MVC .NET C# 应用程序,我需要一个对象的实例在 MVC 应用程序的整个范围内以及它之外都可用。
该对象是我创建的自定义 C# class 的一个实例。
必须是这个对象的同一个实例,不能在MVC应用程序之外实例化另一个实例。
因此对象必须在此范围内可用(这是我对 "outside the MVC app framework)" 的定义:
var host = WebHost.CreateDefaultBuilder()
.UseKestrel()
.UseUrls("http://*:80")
.UseStartup<Api.Hosting.Startup>()
.UseHttpSys()
.Build();
host.RunAsync();
通过实例化它很容易做到:
var obj = new MyClass();
// here make use of the obj instance
obj.DoSomething();
var host = WebHost.CreateDefaultBuilder()
.UseKestrel()
.UseUrls("http://*:80")
.UseStartup<Api.Hosting.Startup>()
.UseHttpSys()
.Build();
host.RunAsync();
但现在我如何在 MVC 应用程序中使用相同的对象(我的意思是,在控制器级别、服务级别等等...)
这是使用依赖注入的一个很好的用例。 .NET Core 将 DI 视为框架中的第一个 class 公民 (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection),并且它具有相当高的可配置性,使您有机会精细控制对象的生命周期。在您的 ConfigureServices
方法中,您将添加以下代码以使您在代码示例中创建的对象的单个实例可供 MVC 应用程序使用:
services.AddSingleton<MyClass>(obj);
在 MVC 应用程序中,您最好在控制器上使用构造函数注入来提供 Singleton 实例,但如果当前实现有一些限制,则可以通过 HttpRequest.RequestServices
对象 - 本质上将其用作服务定位器。再次 - 你最好在这里使用构造函数注入并且不要对 HttpRequest 产生不必要的依赖。
我有一个 MVC .NET C# 应用程序,我需要一个对象的实例在 MVC 应用程序的整个范围内以及它之外都可用。
该对象是我创建的自定义 C# class 的一个实例。
必须是这个对象的同一个实例,不能在MVC应用程序之外实例化另一个实例。
因此对象必须在此范围内可用(这是我对 "outside the MVC app framework)" 的定义:
var host = WebHost.CreateDefaultBuilder()
.UseKestrel()
.UseUrls("http://*:80")
.UseStartup<Api.Hosting.Startup>()
.UseHttpSys()
.Build();
host.RunAsync();
通过实例化它很容易做到:
var obj = new MyClass();
// here make use of the obj instance
obj.DoSomething();
var host = WebHost.CreateDefaultBuilder()
.UseKestrel()
.UseUrls("http://*:80")
.UseStartup<Api.Hosting.Startup>()
.UseHttpSys()
.Build();
host.RunAsync();
但现在我如何在 MVC 应用程序中使用相同的对象(我的意思是,在控制器级别、服务级别等等...)
这是使用依赖注入的一个很好的用例。 .NET Core 将 DI 视为框架中的第一个 class 公民 (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection),并且它具有相当高的可配置性,使您有机会精细控制对象的生命周期。在您的 ConfigureServices
方法中,您将添加以下代码以使您在代码示例中创建的对象的单个实例可供 MVC 应用程序使用:
services.AddSingleton<MyClass>(obj);
在 MVC 应用程序中,您最好在控制器上使用构造函数注入来提供 Singleton 实例,但如果当前实现有一些限制,则可以通过 HttpRequest.RequestServices
对象 - 本质上将其用作服务定位器。再次 - 你最好在这里使用构造函数注入并且不要对 HttpRequest 产生不必要的依赖。