【发布时间】:2013-01-12 21:59:57
【问题描述】:
我有以下具有多个依赖项的基类:
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;
}
}
...
}
现在我的派生类只需要将一件事传递给我的基类构造函数。我也有一个很好的效果,即仅在需要时才解决我的依赖关系。
但是,我后来了解到传递 IOC 容器是个坏主意。考虑到传入的许多服务已在我的 IOC 容器中注册为单例,最好的替代设计模式是什么?
【问题讨论】:
-
“在我的派生类中,我不想重复这个基类构造函数中的所有参数”——要么使用属性注入,要么自动生成构造函数并完成它。 (无论如何,您并不能真正有意义地将子类与其父类分离。)
标签: c# .net design-patterns inversion-of-control ioc-container