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
    中查找的对象。()
  • 如何在启动后注册服务 将附加服务注册到ASP.Net Core附带的
    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();
    }