Возможно, это хорошая идея использовать шаблон провайдера: вместо того, чтобы предоставлять фактическое соединение с ребенком, вы передаете только описание того, как получить соединение. Таким образом, вы можете управлять ресурсами локально, оптимизировать (сокращать) срок службы выделенных ресурсов и локально обрабатывать ошибки.
Если вы не хотите использовать отдельный класс провайдера, вы можете использовать что-то вроде этого:
public class Parent
{
var child = new Child(() => new SqlConnction(connectionString));
child.MethodUsingTheConnectionPassedInTheConstructor();
}
public class Child
{
private readonly Func<IDbConnection> _connProvider;
public Child(Func<IDbConnection> connProvider)
{
_connProvider = connProvider;
}
public MethodUsingTheConnectionPassedInTheConstructor()
{
using(var connection = _connProvider())
{
}
}
}