相关疑难解决方法(0)

使用ASP.NET Core DI解析实例

如何使用ASP.NET Core MVC内置依赖注入框架手动解析类型?

设置容器很容易:

public void ConfigureServices(IServiceCollection services)
{
    // ...

    services.AddTransient<ISomeService, SomeConcreteService>();
}
Run Code Online (Sandbox Code Playgroud)

但是如何在ISomeService不进行注射的情况下解决?例如,我想这样做:

ISomeService service = services.Resolve<ISomeService>();
Run Code Online (Sandbox Code Playgroud)

没有这样的方法IServiceCollection.

c# dependency-injection asp.net-core-mvc asp.net-core

245
推荐指数
6
解决办法
17万
查看次数

如何在ASP.NET Core中解析ConfigureServices中的实例

是否可以IOptions<AppSettings>ConfigureServicesStartup中的方法解析实例?通常,您可以使用IServiceProvider初始化实例,但在注册服务时此阶段没有实例.

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<AppSettings>(
        configuration.GetConfigurationSection(nameof(AppSettings)));

    // How can I resolve IOptions<AppSettings> here?
}
Run Code Online (Sandbox Code Playgroud)

c# inversion-of-control asp.net-core-mvc asp.net-core

67
推荐指数
3
解决办法
3万
查看次数

.NET Core Singleton Creation被多次调用

我正在将服务注册为.NET Core中的单例.然而,我正在看多次调用单例的构造函数.

services.AddSingleton<DbAuthorizationOptions, ContextAuthorizationOptions>();
Run Code Online (Sandbox Code Playgroud)

我的上下文授权选项只是实体类型字典IValidators,上下文授权选项被传递到DBContext自动运行验证.

在我的服务注册期间,我还注册了在DI中注册的容器的动态验证器.

var useDynamicValidator = serviceOption.ValidatorOptions != null;
if(useDynamicValidator)
{
    //TODO: Extract this to before the register service no sense in building the provider each time
    //TODO: Make this cleaner don't be dependent on Authorization options
    var provider = services.BuildServiceProvider();
    var authOptions = provider.GetService<DbAuthorizationOptions>();
    var validator = BuildDynamicValidatorFactory(serviceOption).Invoke(provider, null);
    authOptions.ValidatorOptions.AddValidatorForSet(validator);
}
Run Code Online (Sandbox Code Playgroud)

我注意到,当我打电话GetService给提供者时,我会收到一个新的单例,而不是现有的单例.构建提供程序是否会创建一个新容器,以便重新注册所有服务?

如果是这样,我如何调用一个方法在现有的单例容器中注册我的动态验证器IServiceProvider,有没有办法在构建服务容器后调用一次注册?

c# dependency-injection .net-core asp.net-core

9
推荐指数
1
解决办法
3293
查看次数