在我的项目中,我正在加载一些 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);
}
}