![](/img/trans.png)
[英]How to register RoleManager in Startup.cs in ASP.NET Core
[英]Is there any extensibility point in Asp.Net core to register services anywhere other than startup.cs?
基本上在Asp.Net Core
我们在startups.cs
文件中注册服务。 现在的问题是, Asp.Net Core
是否有任何可扩展性点,这使我们有机会加入某种注册方法(例如,通过实现特定的接口),并且不会搞砸startup.cs
?
Startup
如果只想避免在Startup.cs
造成混乱,只需将服务注册逻辑委托给另一个方法(可能在另一个静态类中)即可。
ServiceRegistry.RegisterAllServices(services);
如果您真的想闯入ASP.Net的启动逻辑,恐怕运气不好。 ServicesCollection的构建在BuildCommonServices方法中进行。 如您所见,这里没有简单的方法可以挂接到逻辑上。
简而言之,启动ASP.Net
应用程序时会发生以下情况:
.Net core
,只有一个应用程序模型-控制台应用程序; 所以称Main
。 Configure
, ConfigureContainer
和ConfigureServices
。 startupType
和startupType
。 ( 参考 ) 将其他服务注册到ASP.Net Core
附带的IOC Container
中并ASP.Net Core
。
DI框架本身是非常基础的,如果您发现自己做的事情不那么琐碎,则可能应该将自己升级为更成熟且功能完善的IOC Container
。
您可以在GitHub上的aspnet / DependencyInjection存储库上的README文件中找到一些链接。
不过,我必须指出,在创建容器之后注册服务被认为是一种不好的做法。
这里已经很好的答案了,但是只是添加我的2c。
我认为您本质上在寻找的是“配置文件”或“模块”之类的东西,并且IOC会进行程序集扫描。 您已经可以执行此操作,但是您需要创建自己的界面/反射代码。
另一种选择是使用ServiceCollection Extension模式,这似乎是添加“服务”的默认方法。
例如,使用以下代码:
public static class ServicesConfiguration
{
public static void AddCustomServices(this IServiceCollection services)
{
services.AddTransient<IMyService, MyService>();
}
}
然后,您的Configure Services方法将更像:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddCustomServices();
}
从某些方面来说,我更喜欢这样做,因为您仍然可以一目了然地看到正在加载的内容并按照路线行驶,而不是进行一些神秘的思考。
进一步的阅读: http : //dotnetcoretutorials.com/2017/01/24/servicecollection-extension-pattern/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.