这是在运行时解析依赖关系的适当解决方案

时间:2015-03-27 16:00:33

标签: c# inversion-of-control

我有一个类,它需要根据用户输入以不同方式处理数据。

有两个处理器类都遵循相同的接口,但行为略有不同。

我的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;
    }
}

1 个答案:

答案 0 :(得分:1)

既然你强调使用IOC我猜你真正的问题是IOC是否可以完成这项工作。我认为IOC只应该在启动时用于制作静态对象图,并且稍后应该使用Factory模式(或其他模式)。所以你的代码看起来很好。