2016-03-27 59 views

回答

1

我在ConfigureServices方法如下行startup.cs:

services.AddSingleton(serviceType => Configuration); 
services.AddInstance<Microsoft.Extensions.Configuration.IConfiguration>(Configuration); 

builder.Populate(services); 
var container = builder.Build(); 
var serviceProvider = container.Resolve<IServiceProvider>(); 
return serviceProvider; 

然後在我的DAL,我訪問通過構造像打針:

public MyDataContext(IConfiguration configurations) 

然後我就可以訪問該項目,並拉我的連接信息,如:

configurations["Data:MyConnection:ConnectionString"] 
+0

謝謝@Jeremy Armstrong,但我使用autofac而不是ASP.NET Core的DI。但我試圖基本上與autoface相同... – stevo

+0

使用剩餘的代碼編輯我的答案,將您的服務填充到autofac構建器中,然後返回相應的服務提供者。 –

+0

再次感謝@Jeremy Armstrong!我得到它的工作! – stevo

0

我不是我的DAL需要知道連接字符串名稱的任何粉絲,我不認爲這是它的一部分repsonsibility。我喜歡創造我自己的接口:

因此,例如,我會創造這樣的:當我使用實體框架與DI

public class SecurityContext : DbContext 
{ 
    public SecurityContext(IConnectionSettings settings) 
    : base (settings.Name) 
    { 
    } 
} 

或者ADO.Net一些

public interface IConnectionSettings 
{ 
    public ConnectionStringSettings DataWarehouse { get; } 
    public ConnectionStringSettings Audit { get; } 
    public ConnectionStringSettings Logging { get; } 
    public ConnectionStringSettings Security { get; } 
} 

然後奇怪的原因:

public class LoggingDataAccess 
{ 
    private readonly string _connectionString; 

    public LoggingDataAccess(IConnectionSettings settings) 
    { 
    _connectionString = settings.Logging.ConnectionString; 
    } 

    public void SomeRawAdo() 
    { 
    using (var con = new Connection(_connnectionstring)) 
    { 
    } 
    } 
} 

在我的DI:

public static class IocCOnfig 
{ 
    public static void Start() 
    { 
    var builder = new ContainerBuilder(); 

    builder.Register(r => new ConnectionSettings 
    { 
     DataWarehouse = ConfigurationManager.ConnectionStrings["DataWarehouse"], 
     // etc 
    }); 
    } 

    private class ConnectionSettings : IConnectionSettings 
    { 
    // implement interface... 
    } 
} 
相關問題