如何重构这个工厂方法?

时间:2017-02-02 14:34:17

标签: c# dependency-injection simple-injector

我有以下工厂方法,只返回正确的IDatabase实现。我想将它重构为我的SimpleInjector容器,但不确定如何。

    public class DALFactory
    {
        public static IDatabase GetDAL()
        {
            string asm = "SQL"; /* Hardcoded choice of DAL */
            if (asm == "XML")
                return new XmlDatabase();
            if (asm == "SQL")
                return new SqlDatabase();
            return null;
        }
    }

我已经尝试了解如何注册一个集合,但是如何在我的程序中询问IDatabase实例时告诉SimpleInjector使用哪一个?对任何想法开放。只是一个理论计划,我正在尝试重构练习。到目前为止,DI(IoC)首次使用DI(IoC),这是一次令人愉快的眼睛开放体验!

我试过这样做,我关闭了吗?

Container.RegisterCollection<IDatabase>(new [] { typeof(SqlDatabase), typeof(XmlDatabase)});
Container.Register<IDatabase, XmlDatabase>(Lifestyle.Singleton);
Container.Register<IDatabase, SqlDatabase>(Lifestyle.Singleton);

1 个答案:

答案 0 :(得分:1)

如果asm值是硬编码的,或者基于配置文件中的值,则基本上说正在运行的应用程序只有一个特定版本的IDatabase

这意味着您应该注册:

string asm = "SQL"; /* Hardcoded choice of DAL */
if (asm == "XML")
    container.Register<IDatabase, XmlDatabase>();
if (asm == "SQL")
    container.Register<IDatabase, SqlDatabase>();