首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖注入,注入参数

依赖注入,注入参数
EN

Stack Overflow用户
提问于 2016-01-17 02:01:16
回答 5查看 127.4K关注 0票数 102

我正在使用DI的vNext实现。如何将参数传递给构造函数?例如,我有一门课:

代码语言:javascript
复制
public class RedisCacheProvider : ICacheProvider
{
    private readonly string _connectionString;

    public RedisCacheProvider(string connectionString)
    {
        _connectionString = connectionString;
    }
    //interface methods implementation...
}

及服务登记册:

代码语言:javascript
复制
services.AddSingleton<ICacheProvider, RedisCacheProvider>();

如何将参数传递给RedisCacheProvider类的构造函数?例如,Autofac:

代码语言:javascript
复制
builder.RegisterType<RedisCacheProvider>()
       .As<ICacheProvider>()
       .WithParameter("connectionString", "myPrettyLocalhost:6379");
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-01-17 02:10:51

您可以提供委托手动实例化缓存提供程序,也可以直接提供实例:

代码语言:javascript
复制
services.AddSingleton<ICacheProvider>(provider => new RedisCacheProvider("myPrettyLocalhost:6379"));

services.AddSingleton<ICacheProvider>(new RedisCacheProvider("myPrettyLocalhost:6379"));

请注意,即使容器实现了IDisposable,容器也不会显式地释放手动实例化的类型。有关服务的处置的更多信息,请参见服务的处置核心文档。

票数 159
EN

Stack Overflow用户

发布于 2019-12-18 09:55:56

如果构造器还具有依赖项,而依赖项应由DI解决,则可以使用以下方法:

代码语言:javascript
复制
public class RedisCacheProvider : ICacheProvider
{
    private readonly string _connectionString;
    private readonly IMyInterface _myImplementation;

    public RedisCacheProvider(string connectionString, IMyInterface myImplementation)
    {
        _connectionString = connectionString;
        _myImplementation = myImplementation;
    }
    //interface methods implementation...
}

Startup.cs:

代码语言:javascript
复制
services.AddSingleton<IMyInterface, MyInterface>();
services.AddSingleton<ICacheProvider>(provider => 
    RedisCacheProvider("myPrettyLocalhost:6379", provider.GetService<IMyInterface>()));
票数 37
EN

Stack Overflow用户

发布于 2020-01-25 13:56:49

您可以使用:

代码语言:javascript
复制
 services.AddSingleton<ICacheProvider>(x =>
      ActivatorUtilities.CreateInstance<RedisCacheProvider>(x, "myPrettyLocalhost:6379"));

依赖注入: ActivatorUtilities将向类注入任何依赖项。

下面是到MS文档的链接:Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance

另外:有关更多信息,请参见@poke的答案这里。基本上,它是从所提供的服务和您传递的任何其他参数中提取出来的,就像存储构造函数一样。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34834295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档