And*_*ren 40 asp.net dependency-injection asp.net-core
目前缺乏关于DI主题的文档 - 依赖注入.有人可以帮我理解以下内容:
这些注册有什么区别?
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IService, Service>();
services.AddScoped<IService, Service>();
services.AddSingleton<IService, Service>();
services.AddInstance(service);
}
Run Code Online (Sandbox Code Playgroud)Ste*_*ven 48
对于遵循SOLID原则的任何相当大的应用程序的产品开发,vNext的内置DI容器将是无用的,因为:
如果您从一个新的简单项目开始,我的建议是应用Pure DI(这意味着不使用容器的手工连接组件)并通过插入自定义IControllerActivator来解决您的类型.稍后,当批量注册和装饰等功能可以提高组合根的可维护性时,请切换到符合您要求的已建立的DI库之一.
Mar*_* M. 18
这里解释说:
Alpha版本有这个限制:
如果你没有写真正复杂的产品默认DI容器应该足够你.在其他情况下,您可以尝试已经提到的具有高级功能的库.
我的建议是从默认的那个开始,并在(如果)遇到你无法用它做的事情时改变实现.
这些注册有什么区别?
资料来源:http://www.khalidabuhakmeh.com/asp-vnext-dependency-injection-lifecycles,http : //dotnetliberty.com/index.php/2015/10/15/asp-net-5-mvc6-dependency-喷射式-6-步骤/
回答你的第一个问题:似乎ASP.NET文档已经更新,现在清楚地说明了每种类型的注册:
可以使用以下生命周期配置ASP.NET服务:
短暂的
每次请求时都会创建瞬态生命周期服务.这种生命周期最适合轻量级,无状态服务.
作用域
每个请求创建一次范围生命周期服务.
独生子
Singleton生命周期服务是在第一次请求时创建的,然后每个后续请求将使用相同的实例.如果您的应用程序需要单例行为,则建议允许服务容器管理服务的生命周期,而不是实现单例设计模式并自行管理对象的生命周期.
实例 [仅限RTM!]
您可以选择将实例直接添加到服务容器中.如果这样做,此实例将用于所有后续请求(此技术将创建一个Singleton范围的实例).Instance服务和Singleton服务之间的一个关键区别是Instance服务是在ConfigureServices中创建的,而Singleton服务是在第一次请求时延迟加载的.
在RTM中更新
请注意,在Asp.Net Core RTM docs中删除了实例.实例与Singleton基本相同,但它们具有不同的初始化语义(Singleton是延迟加载的).但是现在没有AddInstance API,只有AddSignleton可以接受已经创建的实例.
| 归档时间: |
|
| 查看次数: |
10532 次 |
| 最近记录: |