首页 > 解决方案 > 在运行时 .net 核心中从控制器注册服务

问题描述

在我的项目中,我正在加载一些 dll 程序集,这些程序集包含控制器以及需要在我们的 DI 容器中注入的服务。

我尝试使用默认的 dotnet core DI 或 Autofac 寻找解决方案,但没有任何结果。

我知道这不是在运行时更新 DI 的好习惯,但我希望我能找到一个好的解决方案。

我有另一种方法,但它将服务保存在配置文件中,并且需要重新启动应用程序以加载配置以开始注册服务。

我的代码示例

public class ServiceFactory : IServiceProvider
{
    public static IServiceCollection services { get; set; }
    public static IServiceProvider serviceProvider { get; private set; }
    static ServiceFactory()
    {
        services = new ServiceCollection();
        serviceProvider = services.BuildServiceProvider();
    }
    public static void ConfigureServices(IServiceCollection _services)
    {
        services = _services;
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }
    public static void Register()
    {
        services.AddTransient<IRepo, Repo>();
    }
    public static void Update()
    {
        serviceProvider = services.BuildServiceProvider();
    }
    public object GetService(Type serviceType)
    {
        return serviceProvider.GetService(serviceType);
    }
}

标签: c#dependency-injectionruntimeautofacservicecollection

解决方案


推荐阅读