正确处理 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 路由中的嵌套资源
EF Core 中的 ASP.NET Core 5 MVC 和 Identity - 基于资源的授权