C# Asp.Net core中是否有任何扩展点可以在startup.cs以外的任何位置注册服务?
基本上在C# Asp.Net core中是否有任何扩展点可以在startup.cs以外的任何位置注册服务?,c#,asp.net-core,C#,Asp.net Core,基本上在Asp.Net核心中,我们在startups.cs文件中注册服务。现在的问题是,Asp.Net Core中是否有任何扩展点,使我们有机会连接到某种注册器方法(例如通过实现特定的接口),并且不会弄乱startup.cs?避免弄乱startup 如果您只是想避免在Startup.cs中造成混乱,只需将服务注册逻辑委托给另一个方法,可能是在另一个静态类中 ServiceRegistry.RegisterAllServices(services); 挂接到ASP.Net启动管道 如果你真的想侵
Asp.Net核心
中,我们在startups.cs
文件中注册服务。现在的问题是,Asp.Net Core
中是否有任何扩展点,使我们有机会连接到某种注册器方法(例如通过实现特定的接口),并且不会弄乱startup.cs
?避免弄乱startup
如果您只是想避免在Startup.cs
中造成混乱,只需将服务注册逻辑委托给另一个方法,可能是在另一个静态类中
ServiceRegistry.RegisterAllServices(services);
挂接到ASP.Net启动管道
如果你真的想侵入ASP.Net的启动逻辑,如果运气好的话,恐怕你就出局了。在该方法中会生成。正如你所看到的,这里没有简单的方法来连接逻辑
简而言之,ASP.Net
应用程序启动时会发生以下情况:
.netcore
中,只有一种应用程序模型-控制台应用程序;因此调用Main
Configure
、ConfigureContainer
和ConfigureServices
startupType
和startupType
中查找的对象。()IOC容器中
并不是一件小事
DI框架本身非常基础,如果您发现自己正在尝试做一些不平凡的事情,您可能应该升级到一个更成熟、功能更完整的IOC容器
您可以在GitHub上的存储库中的文件中找到一些链接
但我必须注意,在创建容器后注册服务被认为是一种不好的做法 这里的答案已经很好了,但我想补充一下我的2c
我认为你基本上是在寻找类似“配置文件”或“模块”的东西,而IOC会进行组装扫描。您已经可以这样做了,但是您需要创建自己的接口/反射代码
另一种选择是使用ServiceCollection扩展模式,这似乎是添加“服务”的默认方式
例如,以以下代码为例:
public static class ServicesConfiguration
{
public static void AddCustomServices(this IServiceCollection services)
{
services.AddTransient<IMyService, MyService>();
}
}
在某些方面,我更喜欢这种方式,因为你仍然可以一目了然地看到正在加载的内容并跟踪跟踪跟踪,而不是进行一些神秘的思考
进一步阅读:您为什么要这样做。。。Core是围绕着startup构建的,startup是启动代码的位置。将代码放在其他地方意味着您正在做一些超出常规的事情,未来的程序员将不知道发生了什么,从而妨碍了可维护性。我很困惑-使用Startup.cs有什么问题?为什么它不能满足您的需求?@ErikPhilips我想实现一个模块化系统,其中每个插件都会注册一些服务。我在asp.net 5 rc1上做过类似的事情。但不幸的是,自发布以来,一切都发生了变化。现在我必须重新实现所有这些东西。顺便说一下,我使用Autofac作为IoC容器。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddCustomServices();
}