我通過autofac 模塊將該層連接在一起。非常感謝endeffects。 Here is the HowTo 現在我試圖使連接字符串在DAL層可用。我試圖註冊:如何使用Autofac在N層ASP.NET MVC Core 1.0應用程序中提供連接字符串
Configuration (Microsoft.Extensions.Configuration)
從啓動類,但沒有成功。
我們的幫助將不勝感激,謝謝斯特凡
我通過autofac 模塊將該層連接在一起。非常感謝endeffects。 Here is the HowTo 現在我試圖使連接字符串在DAL層可用。我試圖註冊:如何使用Autofac在N層ASP.NET MVC Core 1.0應用程序中提供連接字符串
Configuration (Microsoft.Extensions.Configuration)
從啓動類,但沒有成功。
我們的幫助將不勝感激,謝謝斯特凡
我在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"]
我不是我的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...
}
}
謝謝@Jeremy Armstrong,但我使用autofac而不是ASP.NET Core的DI。但我試圖基本上與autoface相同... – stevo
使用剩餘的代碼編輯我的答案,將您的服務填充到autofac構建器中,然後返回相應的服務提供者。 –
再次感謝@Jeremy Armstrong!我得到它的工作! – stevo