public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddScoped<IEmailSender, AuthMessageSender>();
}
DR
瞬态对象总是不同的;为每个控制器和每个服务提供一个新实例。
作用域对象在请求中是相同的,但在不同的请求中是不同的。
using System;
namespace DependencyInjectionSample.Interfaces
{
public interface IOperation
{
Guid OperationId { get; }
}
public interface IOperationTransient : IOperation
{
}
public interface IOperationScoped : IOperation
{
}
public interface IOperationSingleton : IOperation
{
}
public interface IOperationSingletonInstance : IOperation
{
}
}
using System;
using DependencyInjectionSample.Interfaces;
namespace DependencyInjectionSample.Classes
{
public class Operation : IOperationTransient, IOperationScoped, IOperationSingleton, IOperationSingletonInstance
{
Guid _guid;
public Operation() : this(Guid.NewGuid())
{
}
public Operation(Guid guid)
{
_guid = guid;
}
public Guid OperationId => _guid;
}
}
接下来,在configureReservices
中,每个类型都根据其命名的生存期添加到容器中:
services.AddTransient<IOperationTransient, Operation>();
services.AddScoped<IOperationScoped, Operation>();
services.AddSingleton<IOperationSingleton, Operation>();
services.AddSingleton<IOperationSingletonInstance>(new Operation(Guid.Empty));
services.AddTransient<OperationService, OperationService>();
请注意,IOOperationSingletonInstance
服务正在使用一个已知ID为GUID.Empty
的特定实例,因此在使用此类型时会很清楚。我们还注册了一个operationservice
,它依赖于其他每个operation
类型,这样就可以在请求中清楚地看到,对于每个操作类型,这个服务获得的是与控制器相同的实例,还是一个新的实例。此服务所做的只是将其依赖项公开为属性,因此可以在视图中显示它们。
using DependencyInjectionSample.Interfaces;
namespace DependencyInjectionSample.Services
{
public class OperationService
{
public IOperationTransient TransientOperation { get; }
public IOperationScoped ScopedOperation { get; }
public IOperationSingleton SingletonOperation { get; }
public IOperationSingletonInstance SingletonInstanceOperation { get; }
public OperationService(IOperationTransient transientOperation,
IOperationScoped scopedOperation,
IOperationSingleton singletonOperation,
IOperationSingletonInstance instanceOperation)
{
TransientOperation = transientOperation;
ScopedOperation = scopedOperation;
SingletonOperation = singletonOperation;
SingletonInstanceOperation = instanceOperation;
}
}
}
为了演示对应用程序的单独请求内部和之间的对象生存期,示例包括一个OperationsController
以及一个Operation
类型,它请求每种IOperation
类型和一个OperationService
。然后,index
操作显示控制器和服务的所有operationid
值。
using DependencyInjectionSample.Interfaces;
using DependencyInjectionSample.Services;
using Microsoft.AspNetCore.Mvc;
namespace DependencyInjectionSample.Controllers
{
public class OperationsController : Controller
{
private readonly OperationService _operationService;
private readonly IOperationTransient _transientOperation;
private readonly IOperationScoped _scopedOperation;
private readonly IOperationSingleton _singletonOperation;
private readonly IOperationSingletonInstance _singletonInstanceOperation;
public OperationsController(OperationService operationService,
IOperationTransient transientOperation,
IOperationScoped scopedOperation,
IOperationSingleton singletonOperation,
IOperationSingletonInstance singletonInstanceOperation)
{
_operationService = operationService;
_transientOperation = transientOperation;
_scopedOperation = scopedOperation;
_singletonOperation = singletonOperation;
_singletonInstanceOperation = singletonInstanceOperation;
}
public IActionResult Index()
{
// ViewBag contains controller-requested services
ViewBag.Transient = _transientOperation;
ViewBag.Scoped = _scopedOperation;
ViewBag.Singleton = _singletonOperation;
ViewBag.SingletonInstance = _singletonInstanceOperation;
// Operation service has its own requested services
ViewBag.Service = _operationService;
return View();
}
}
}
现在对这个控制器操作发出了两个单独的请求:
观察operationid
值在请求内和请求之间的变化。
>
瞬态对象总是不同的;为每个控制器和每个服务提供一个新实例。
本文向大家介绍什么是AddSingleton,AddScoped,Add Transient C#Asp.net Core?,包括了什么是AddSingleton,AddScoped,Add Transient C#Asp.net Core?的使用技巧和注意事项,需要的朋友参考一下 有三种方法可以在Startup.cs中注册依赖项。即AddSingleton,AddScoped和AddTransi
这肯定不是REST,因为它不是无状态的。它考虑到cookies并有自己的会话。 是RPC吗?RPC和REST有什么区别?
我们如何将下面的代码转换为工厂而不是服务 在这两个方面,工厂和服务的更好实施方式是什么,请提出建议。我是AngularJs的新手,所以请帮我解决这个问题
本文向大家介绍面向连接的服务和无连接的服务之间的差异。,包括了面向连接的服务和无连接的服务之间的差异。的使用技巧和注意事项,需要的朋友参考一下 这些服务都用于在两个或多个设备之间建立连接。这些服务是网络层的一部分。 面向连接的服务 面向连接的服务就像电话系统。它以建立连接开始,以连接终止结束。该服务使用握手方法在发送方和接收方之间建立连接。 无连接服务 面向连接的服务就像一个邮政系统。它不必建立连
想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。 有人能给我解释一下JVM、服务器\ JVM之间的区别吗。dll文件和Java HotSpot VM。我已经学习过了 jvm.dlljava.exe、javaw.exe和jvm.dll之间的差异 JVM和热点的区别是什么? “java-服务器”和“java-客户端”之间的真正区别? http://www.oracle.com/tec
我想从控制器和服务层测试相同的方法。问题是:为什么我必须在控制器中使用注释,为什么不为使用注释。对于服务,同样的问题是,为什么我需要存储库,为什么不使用?你能告诉我这两者的区别吗? 这里是控制器: 这里是服务类: 服务测试: 控制器测试: