我有一个类,它需要根据用户输入以不同方式处理数据。
有两个处理器类都遵循相同的接口,但行为略有不同。
我的IOC容器正在向我的程序实例注入一个IThingerFactory。
以下是我当前解决方案的一个例子。
有没有更好的方法来解决这个问题?
public class Program
{
public IThingerFactory ThingerFactory { get; set; }
public Program(IThingerFactory thingerFactory)
{
ThingerFactory = thingerFactory;
}
public void FunctionWhichDoesStuff(int? input)
{
ThingerFactory.GetThinger(input).DoAThing();
}
}
public interface IThinger
{
void DoAThing();
}
public class DailyThinger : IThinger
{
public void DoAThing()
{
throw new NotImplementedException();
}
}
public class MonthlyThinger : IThinger
{
public MonthlyThinger(int monthNumber)
{
MonthNumber = monthNumber;
}
public int MonthNumber { get; set; }
public void DoAThing()
{
throw new NotImplementedException();
}
}
public interface IThingerFactory
{
IThinger GetThinger(int? number);
}
public class ThingerFactory : IThingerFactory
{
public IThinger GetThinger(int? number)
{
return number.HasValue ?
new MonthlyThinger(number.Value) as IThinger :
new DailyThinger() as IThinger;
}
}
答案 0 :(得分:1)
既然你强调使用IOC我猜你真正的问题是IOC是否可以完成这项工作。我认为IOC只应该在启动时用于制作静态对象图,并且稍后应该使用Factory模式(或其他模式)。所以你的代码看起来很好。