Ole*_*iak 31 c# dependency-injection asp.net-core-mvc asp.net-core
我正在使用DI的vNext实现.如何将参数传递给构造函数?例如,我有课:
public class RedisCacheProvider : ICacheProvider
{
private readonly string _connectionString;
public RedisCacheProvider(string connectionString)
{
_connectionString = connectionString;
}
//interface methods implementation...
}
Run Code Online (Sandbox Code Playgroud)
和服务注册:
services.AddSingleton<ICacheProvider, RedisCacheProvider>();
Run Code Online (Sandbox Code Playgroud)
如何将参数传递给RedisCacheProvider类的构造函数?例如Autofac:
builder.RegisterType<RedisCacheProvider>()
.As<ICacheProvider>()
.WithParameter("connectionString", "myPrettyLocalhost:6379");
Run Code Online (Sandbox Code Playgroud)
Kév*_*let 68
您可以提供委托来手动实例化缓存提供程序,也可以直接提供实例:
services.AddSingleton<ICacheProvider>(provider => new RedisCacheProvider("myPrettyLocalhost:6379"));
services.AddSingleton<ICacheProvider>(new RedisCacheProvider("myPrettyLocalhost:6379"));
Run Code Online (Sandbox Code Playgroud)
fee*_*per 19
如果构造函数还具有应由 DI 解析的依赖项,则可以使用它:
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...
}
Run Code Online (Sandbox Code Playgroud)
启动.cs:
services.AddSingleton<IMyInterface, MyInterface>();
services.AddSingleton<ICacheProvider>(provider =>
RedisCacheProvider("myPrettyLocalhost:6379", provider.GetService<IMyInterface>()));
Run Code Online (Sandbox Code Playgroud)
Rah*_*Jha 13
您可以使用类似于下面示例代码的内容。
经理类:
public class Manager : IManager
{
ILogger _logger;
IFactory _factory;
public Manager(IFactory factory, ILogger<Manager> logger)
{
_logger = logger;
_factory = factory;
}
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs类:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IFactory, Factory>(sp =>
{
var logger = sp.GetRequiredService<ILogger<Factory>>();
var dbContext = sp.GetRequiredService<MyDBContext>();
return new Factory(dbContext, logger);
});
services.AddTransient<IManager, Manager>(sp =>
{
var factory = sp.GetRequiredService<IFactory>();
var logger = sp.GetRequiredService<ILogger<Manager>>();
return new Manager(factory, logger);
});
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读完整示例:.Net Core 中 Startup.cs 中的 DI
小智 8
您可以使用 :
services.AddSingleton<ICacheProvider>(x =>
ActivatorUtilities.CreateInstance<RedisCacheProvider>(x, "myPrettyLocalhost:6379"));
Run Code Online (Sandbox Code Playgroud)
依赖注入:ActivatorUtilities 将向您的类注入任何依赖项。
| 归档时间: |
|
| 查看次数: |
31749 次 |
| 最近记录: |