【问题标题】:Proper handling of resources in asp.net core正确处理 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 密集型或网络资源密集型的类。我想以尽可能高性能的方式编写应用程序,因此任何建议或建议都将不胜感激。

【问题讨论】:

    标签: c# asp.net-core dependency-injection clr


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-08-19
        • 1970-01-01
        • 2013-03-13
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        • 2019-04-25
        • 2023-04-08
        相关资源
        最近更新 更多