正确处理 asp.net core 中的资源

Posted

技术标签:

【中文标题】正确处理 asp.net core 中的资源【英文标题】:Proper handling of resources in asp.net core 【发布时间】:2021-12-29 14:55:30 【问题描述】:

我正在尝试正确管理 asp.net 核心中的资源。是否有必要在依赖注入容器中注册我创建的每个对象?如果我在依赖注入容器中注册一个对象,我在该对象中创建的对象会发生什么?例如:

services.AddScoped<ISimpleObject1, SimpleObject1>();

public class SimpleObject1 : ISimpleObject1 
        public const string Message = "Hello";
        public SimpleObject2 simpleObject2 = new SimpleObject2()  
            Message2 = "Hello again"; 
        ;

我对 asp.net 核心和 CLR 运行时还很陌生。我的想法是,我只需要注册 IO 密集型或网络资源密集型的类。我想以尽可能高性能的方式编写应用程序,因此任何建议或建议都将不胜感激。

【问题讨论】:

【参考方案1】:

我为了向依赖服务注册一个对象,你需要指定它在依赖服务中实现/表示的类型。

您的代码可能无法正常工作,因为 SimpleObject1 类没有继承/实现 ISimpleObject1

话虽如此,您在这里传递了两种类型。它代表的类型(ISimpleObject1)和实现类型(SimpleObject1)。依赖服务不会查看对象来注册它们,因为它不知道它们代表什么类型。这也可能是一个性能问题。反射非常广泛。

我的建议是使用 services.Add*() 方法注册您需要的每项服务。

【讨论】:

【参考方案2】:

一般来说,依赖注入与解决性能或资源问题无关。这是一种使用 IoC 原则使您的类松散耦合并分离关注点的设计模式。

您没有将所有依赖项注册为服务。这取决于您的应用程序架构。根据经验,当类的职责之间有明确的界限时,我会创建和注册服务。

您在已注册的服务中实例化的对象 (SimpleObject2) 将与您的服务 (ISimpleObject1) 具有相同的生命周期。

有关使用寿命的更多信息,请参阅https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection#service-lifetimes。

【讨论】:

以上是关于正确处理 asp.net core 中的资源的主要内容,如果未能解决你的问题,请参考以下文章

[Core]Asp.Net Core中的各种过滤器(授权资源操作结果异常)

正确处理 ASP.net MVC 4 Web Api 路由中的嵌套资源

十二个 ASP.NET Core 例子——过滤器

EF Core 中的 ASP.NET Core 5 MVC 和 Identity - 基于资源的授权

InvalidOperationException:不正确的内容类型:ASP.NET Core

如何正确重定向到 ASP.NET Core Razor Pages 中的同一页面?