いくつかの依存関係を持つ次の基本クラスがありました。
public abstract class ViewModel
{
private readonly ILoggingService loggingService;
public ViewModel(
ILoggingService loggingService,
...)
{
this.loggingService = loggingService;
...
}
}
私の派生クラスでは、この基本クラスのコンストラクターですべてのパラメーターを繰り返す必要がないため、次のようにしました。
public abstract class ViewModel
{
private readonly IUnityContainer container;
private ILoggingService loggingService;
...
public ViewModel(IUnityContainer container)
{
this.container = container;
}
public ILoggingService LoggingService
{
get
{
if (this.loggingService == null)
{
this.loggingService = this.container.Resolve<IUnityContainer>();
}
return this.loggingService;
}
}
...
}
これで、派生クラスは基本クラス コンストラクターに 1 つのものを渡すだけで済みます。また、依存関係が必要な場合にのみ解決されるという優れた効果もあります。
しかし、その後、IOC コンテナーを渡すのは悪い考えであることがわかりました。渡されたサービスの多くがシングルトンとして IOC コンテナーに登録されていることを念頭に置いて、最良の代替設計パターンは何ですか?