早上好,

我们目前正在从EF迁移到使用ADO.NET作为后端。对于EF,注入(inject)连接字符串非常容易。但是,我无法弄清楚如何使用标准服务。当前代码是:

services.AddScoped<IDataCatalogRepository, SqlDataCatalogRepository>();

目前正在通过GitHub上的Dependency Injection测试项目,但未完全了解我的需求。我想做的是:
services.AddScoped<IDataCatalogRepository, SqlDataCatalogRepository>("connectionString")

SqlDataCatalogRepository确实具有connectionString作为其构造函数属性之一。

使用Beta 4,有什么想法吗?

史蒂文·M

最佳答案

您需要的是工厂。您使用的AddScoped方法几乎没有重载,包括带有ImplementationFactory参数的重载。

您的代码如下所示:

private static readonly Func<IServiceProvider, IDataCatalogRepository> repoFactory = (_) =>
{
    var connectionString = "get your connection string from somewhere";
    return new SqlDataCatalogRepository(connectionString);
}

然后像这样调用AddScoped:
services.AddScoped<IDataCatalogRepository>(repoFactory);

关于dependency-injection - 将ASP.NET 5 DI连接字符串转换为ADO.NET,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30538056/

10-10 15:35