所以我有一个包含早午餐服务类的软件。这些服务通过各自的构造函数来获取一些依赖关系。
我的设计考虑了依赖注入,但是打算在软件之上构建的开发人员可能不想使用DI。因此我不实现了IOC容器,因此如果需要,由开发人员引入一个容器。
我的问题是该软件附带了一个使用这些服务的管理网站。 我不想对网站中的服务依赖项进行硬编码,因为我希望开发人员可以根据需要进行切换。
那我该怎么办呢?
我正在考虑为服务引入工厂,并在某处给它一个固定的静态位置。然后在网站上使用它。
public class ServiceFactory : IServiceFactory
{
public static IServiceFactory Current { get; set; }
static ServiceFactory()
{
Current = new ServiceFactory();
}
public TService Create<TService>()
{
// Creation logic here.
}
}
开发人员可以通过将自己的IServiceFactory
实现设置为静态ServiceFactory.Current
属性来控制事物。
这是要走的路吗?
答案 0 :(得分:2)
我想注意两件事。
答案 1 :(得分:1)
你有没有看过CommonServiceLocator图书馆?它被设计为在IOC容器上提供抽象层,但是您可以同样地使用它来描述服务工厂,这样您的应用程序就能够解析其依赖关系而无需知道它们是来自DI还是工厂实施......