私は接続文字列の名前について何か知っておく必要がある私のDALのファンではありません。私はそれがrepsonsibilityの一部だとは思わない。
だから、例えば私のようなものを作成します::私はDI
いくつかのために
public class SecurityContext : DbContext
{
public SecurityContext(IConnectionSettings settings)
: base (settings.Name)
{
}
}
またはADO.NetとEntity Frameworkのを使用しているときに
public interface IConnectionSettings
{
public ConnectionStringSettings DataWarehouse { get; }
public ConnectionStringSettings Audit { get; }
public ConnectionStringSettings Logging { get; }
public ConnectionStringSettings Security { get; }
}
を私は自分のインターフェースを作成することを好みます奇妙な理由:私のDIで
public class LoggingDataAccess
{
private readonly string _connectionString;
public LoggingDataAccess(IConnectionSettings settings)
{
_connectionString = settings.Logging.ConnectionString;
}
public void SomeRawAdo()
{
using (var con = new Connection(_connnectionstring))
{
}
}
}
:
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 builderに移入し、そして適切なサービスプロバイダを返すために残りのコードを使って私の答えを編集しました。 –
もう一度@Jeremy Armstrong !!私はそれを働かせた! – stevo