You should not depend your interface to any db context and initialize method. You can do it in concrete class constructor.
public interface IService
{
void DoSomething();
void DoOtherThing();
}
public class Service : IService
{
private readonly object dependency1;
private readonly object dependency2;
private readonly object dependency3;
private readonly object context;
public Service(
object dependency1,
object dependency2,
object dependency3,
object context )
{
this.dependency1 = dependency1 ?? throw new ArgumentNullException(nameof(dependency1));
this.dependency2 = dependency2 ?? throw new ArgumentNullException(nameof(dependency2));
this.dependency3 = dependency3 ?? throw new ArgumentNullException(nameof(dependency3));
// context is concrete class details not interfaces.
this.context = context;
// call init here constructor.
this.Initialize(context);
}
protected void Initialize(Context context)
{
// Initialize state based on context
// Heavy, long running operation
}
public void DoSomething()
{
// ...
}
public void DoOtherThing()
{
// ...
}
}