利用反射实现的抽象工厂

传入想要实例化的类,反射实现创建类

抽象工厂代码

    class SimpleFactory<T> where T :class
    {
        private static string IConfigSpace = ConfigurationManager.AppSettings["NameSpace"];
        private static string IConfigName = ConfigurationManager.AppSettings["Name"];


        public static T Slove()
        {

            for (int i = 0; i < IConfigName.Split(',').Length; i++)
            {
                //Assembly assembly = Assembly.Load(IConfigSpace);
                //Type type = assembly.GetType(IConfigSpace + "." + IConfigName.Split(',')[i]);
                //T temp = Activator.CreateInstance(type) as T;
                T temp = Assembly.Load(IConfigSpace).CreateInstance(IConfigSpace + "." + IConfigName.Split(',')[i]) as T;
                if (temp != null) return temp;
            }
            return null;
        }
    }

通过config配置,添加需要实现的类。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
    </startup>
	<appSettings>
		<add key="NameSpace" value="SimpleFactoryByReflection"/>
		<add key="Name" value="Animal,Plant,Mammal,Car"/>
	</appSettings>
</configuration>

上面这个抽象工厂,实现了配置文件修改需要实例化的类。

posted @ 2022-07-27 20:12  xunzf  阅读(62)  评论(0)    收藏  举报