反射:
常用於工廠,消除switch。
依賴注入(DependencyInjection):解決switch問題。原本需要專門的IoC容器提供,比如Spring.Net。簡單的使用.Net技術“反射”既可以。
格式:
Assembly.Load(“程式集名稱”).CreateInstance(“命名空間.類名稱”)
UsingSystem.Reflection;
Demo1:
//常規寫法
IUserresult=new SqlserverUser();
//反射寫法
UsingSystem.Reflection;
IUserresult=(IUser)Assembly.Load(“當前程式集的名稱”).CreateInstance(“當前命名空間.要執行個體化的類名”);
Demo2:
簡單工廠
UsingSystem.Reflection;
UsingSystem.Configrantion;
classDataAccess
{
private static readonly string AssemblyName = "ConsoleApp2";
private static readonly string db = "SqlServer";
//private static readonly string db = "Access";
//配合App.Config使用
//private static readonly string db =ConfigurationSettings.AppSettings["DB"];
public static IUser CreateUser()
{
string className = AssemblyName + "." + db + "User";
return(IUser)Assembly.Load(AssemblyName).CreateInstance(className);
}
public static IAdminCreateAdmin()
{
IAdmin result = null;
switch (db)
{
case "SqlServer":
result = newSqlServerAdmin();
break;
case "Access":
result = new AccessAdmin();
break;
}
return result;
}