I’ve many core class that require ISessionContext of the database, ILogManager for log and IService used for communicate with another services. I want use dependency injection for this class used by all core classes.
I’ve two possibile implementation. The core class that accept IAmbientContext with all the three class or inject for all class the three classes.
public interface ISessionContext { ... } public class MySessionContext: ISessionContext { ... } public interface ILogManager { } public class MyLogManager: ILogManager { ... } public interface IService { ... } public class MyService: IService { ... }
First solution:
public class AmbientContext { private ISessionContext sessionContext; private ILogManager logManager; private IService service; public AmbientContext(ISessionContext sessionContext, ILogManager logManager, IService service) { this.sessionContext = sessionContext; this.logManager = logManager; this.service = service; } } public class MyCoreClass(AmbientContext ambientContext) { ... }
second solution(without ambientcontext)
public MyCoreClass(ISessionContext sessionContext, ILogManager logManager, IService service) { ... }
Wich is the best solution in this case?