데이터베이스의 ISessionContext, 로그의 경우 ILogManager 및 다른 서비스와의 통신에 사용되는 IService가 필요한 많은 핵심 클래스가 있습니다. 모든 핵심 클래스에서 사용하는이 클래스에 종속성 주입을 사용하고 싶습니다.
두 가지 가능한 구현이 있습니다. 세 클래스 모두에서 IAmbientContext를 허용하거나 모든 클래스에 세 클래스를 삽입하는 핵심 클래스입니다.
public interface ISessionContext
{
...
}
public class MySessionContext: ISessionContext
{
...
}
public interface ILogManager
{
}
public class MyLogManager: ILogManager
{
...
}
public interface IService
{
...
}
public class MyService: IService
{
...
}
첫 번째 해결책 :
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)
{
...
}
두 번째 솔루션 (주변 컨텍스트없이)
public MyCoreClass(ISessionContext sessionContext, ILogManager logManager, IService service)
{
...
}
이 경우 Wich가 최고의 솔루션입니까?
IService
다른 서비스와의 통신에 사용되는 것은 무엇입니까 ?"IService
다른 서비스에 대한 모호한 종속성을 나타내는 경우 서비스 로케이터처럼 들리며 존재해서는 안됩니다. 클래스는 소비자가 자신의 작업을 명시 적으로 설명하는 인터페이스에 의존해야합니다. 어떤 클래스도 서비스에 대한 액세스를 제공하기 위해 서비스가 필요하지 않습니다. 클래스에는 클래스에 필요한 특정 작업을 수행하는 종속성이 필요합니다.