使用 Windsor 已经有一段时间了,我有点惊讶我没有早点遇到这个“设计”问题。我不知道如何最好地解决它。
我有一个ConverterService
用于执行数据转换的类。这是界面(我已将参数/返回值更改为对象以简化示例):-
public interface IConverterService
{
object ConvertData(object sourceData);
}
转换器类需要一些配置设置,由ISettingsProvider
. 这些设置用于构造函数和 ConvertData() 方法。因此,我将 ISettingsProvider 注入到构造函数中:-
public class ConverterService : IConverterService
{
private ISettingsProvider _settingsProvider;
public ConverterService(ISettingsProvider settingsProvider)
{
_settingsProvider = settingsProvider;
// Do some one-time initialisation using info from settingsProvider
// and store the results in class variables (not shown), used by ConvertData.
}
public object ConvertData(object sourceData)
{
// Do the conversion - also uses _settingsProvider,
// and other variables initialised in the constructor ..
}
}
ConverterService 和 SettingsProvider 都以通常的方式在 Windsor 中注册:-
container.Register(Component.For<IConverterService>().ImplementedBy<ConverterService>().LifeStyle.Singleton);
container.Register(Component.For<ISettingsProvider>().ImplementedBy<SettingsProvider>().LifeStyle.Singleton);
任何需要使用转换器的类都会通过其构造函数注入一个 IConverterService - 标准的东西。这很好用,但我现在需要让许多不同的消费者能够将 ConverterService 与不同的设置提供程序(最多两个或三个)一起使用。
我不能让 ConverterService 瞬态,因为我不希望每次都有初始化开销。感觉就像我需要为每种类型的 ISettingProvider 提供一个单独的 ConverterService 实例,但我不确定是否/如何使用 Windsor 来实现这一点,或者是否需要更基本的重构?
我将如何注册不同的设置提供程序,所有这些提供程序都实现了 ISettingsProvider?更具体地说,Windsor 将如何解决正确的问题(请记住,ConverterService 构造函数只需要一个 ISettingsProvider)?
任何关于我应该如何(重新)设计课程的建议都将不胜感激。