私はこのようなコードを書いているMark Seemannの本を読むと"Dependency Injection in .NET"特定の "new"が "foreign"なので、 "Bastard Injection"ですか?これは「バスタード注射のアンチパターン」の良い例ですか?
public class SessionInitServiceManager
{
protected readonly ICESTraceManager _traceManager;
protected readonly ILogger _logger;
protected readonly IAggregateCalls _aggregator;
protected readonly IMultiCoreRepository _repository;
public SessionInitServiceManager(ICESTraceManager traceManager,
ILogger logger,
IAggregateCalls aggregator,
IMultiCoreRepository repository)
{
_traceManager = traceManager;
_logger = logger;
_aggregator = aggregator;
_repository = repository;
}
public SessionInitServiceManager() : this(new CESTraceManager(),
new Logger("BusinessServices.authenticateUser"),
new Aggregator(),
new RepositoryFactory().BuildMultiCoreRepository()) { }
さておき、4つのパラメータが制限を推進しているとあなたがSessionInitServiceManagerがSRPに違反しているかどうかを質問するように強制するので、合理的なDI(作成者は自分の制限は一般に4であると述べています)。 – RichK
はい、それを読んで3-4 IOCコンテナの有無にかかわらず、この新しい問題を回避する方法の良い例? –
答えは、デフォルトの実装が同じライブラリ内で定義されているか、別のlibrで定義されているかによって異なりますary。 http://stackoverflow.com/questions/6733667/is-there-an-alternative-to-bastard-injection-aka-poor-mans-injection-via-defa/6739953#6739953 –