十七.反射技术
反射:
常用于工厂,消除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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述