首页 > 其他分享 >续写上次自动扫描注册

续写上次自动扫描注册

时间:2024-03-10 15:11:07浏览次数:13  
标签:assembly TextDemo 扫描 myType && type var 续写 上次

上次说到自动扫描的两种方式,接下来,先看看第一种方法,接口的注册

  protected override void RegisterTypes(IContainerRegistry containerRegistry)
  {
      TextDemo textDemo = new TextDemo(containerRegistry);
      textDemo.RegisterService().RegisterRepository().RegisterForNavigation().RegisterDialog();
  }

为了完成我上面的链式编程,我们需要对程序进行改造,以下是完整代码

 public class TextDemo
 {
     IContainerRegistry container;
     public TextDemo(IContainerRegistry containerRegistry)
     {

         container = containerRegistry;

     }
     /// <summary>
     /// 注册服务
     /// </summary>
     /// <param name="containerRegistry"></param>
     /// <returns></returns>
     public TextDemo RegisterService()
     {
         var assembly = Assembly.GetExecutingAssembly(); // 获取当前执行的程序集
         var types = assembly.GetTypes()
             .Where(myType => myType.IsClass && !myType.IsAbstract && typeof(IPrismService).IsAssignableFrom(myType)); 

         foreach (var type in types)
         {
             container.RegisterScoped(typeof(IPrismService), type); 
                                                                       
         }
         return this;
     }

     /// <summary>
     /// 注册仓储
     /// </summary>
     /// <param name="containerRegistry"></param>
     /// <returns></returns>
     public TextDemo RegisterRepository()
     {
         var assembly = Assembly.GetExecutingAssembly(); // 获取当前执行的程序集
         var types = assembly.GetTypes()
             .Where(myType => myType.IsClass && !myType.IsAbstract && typeof(IPrismRepository).IsAssignableFrom(myType)); 

         foreach (var type in types)
         {
             container.RegisterScoped(typeof(IPrismRepository), type); 

         }
         return this;
     }

     /// <summary>
     /// 注册视图
     /// </summary>
     /// <param name="containerRegistry"></param>
     /// <returns></returns>
     public TextDemo RegisterForNavigation()
     {
         var assembly = Assembly.GetExecutingAssembly();
         var viewModelsNamespace = "ViewModels";
         var viewsNamespace = "Views";

         var viewModelTypes = assembly.GetTypes()
             .Where(t => t.Namespace != null && t.Namespace.Contains(viewModelsNamespace) && t.Name.EndsWith("ViewModel"))
             .ToList();

         var viewTypes = assembly.GetTypes()
             .Where(t => t.Namespace != null && t.Namespace.Contains(viewsNamespace) && t.Name.EndsWith("View"))
             .ToList();

         foreach (var viewModelType in viewModelTypes)
         {
             var viewType = viewTypes.FirstOrDefault(v => v.Name == viewModelType.Name.Replace("ViewModel", "View"));
             if (viewType != null)
             {
                 container.RegisterForNavigation(viewType,viewModelType.ToString());
             }
         }
         return this;
     }

     /// <summary>
     /// 注册弹窗
     /// </summary>
     /// <param name="containerRegistry"></param>
     /// <returns></returns>
     public TextDemo RegisterDialog()
     {
         var assembly = Assembly.GetExecutingAssembly(); // 获取当前执行的程序集

         var dialogVMTypes = assembly.GetTypes()
             .Where(myType => myType.IsClass && !myType.IsAbstract && typeof(IDialogAware).IsAssignableFrom(myType));

         var doalogTypes = assembly.GetTypes()
            .Where(t => t.Namespace != null &&  t.Name.EndsWith("Dialog"))
            .ToList();
         foreach (var type in dialogVMTypes)
         {
             var viewType = doalogTypes.FirstOrDefault(v => v.Name == type.Name.Replace("ViewModel", "View"));
             if (viewType != null)
             {
                 container.RegisterForNavigation(viewType, type.ToString());
             }

         }
         return this;
     }
 }

标签:assembly,TextDemo,扫描,myType,&&,type,var,续写,上次
From: https://www.cnblogs.com/guchen33/p/18064209

相关文章

  • WPF多数类概念性注册加自动扫描
    在java中springboot的配置应用了自动扫描@ComponentScan(value={"com.example","com.fox"})而对于Asp.NetCore可以使用ScrutorstaticvoidMain(string[]args){varcollection=newServiceCollection();collection.Scan(action=>......
  • AndroidStudio扫描局域网下的ESP32CAM并获取IP地址
    大概想法如下: 在ESP32CAM端直接下载示例代码udp_server这个历程,修改默认的WIFI和密码,启动之后会输出如下结果 由此我们知道了UDP的地址和端口IP地址为192.168.2.3,端口为3333此时我们使用小工具NetAssist.exe来测试,选择UDP协议之后向ESP32CAM的地址发送广播,如下图所示 ......
  • Intellij IDEA 默认打开上次项目设置
    场景默认情况下,每次打开IntellijIDEA,都会连带着打开上次打开的项目。如果不希望它每次打开时都连带的打开上次的项目,可通过“系统设置”进行配置。配置方法如下图所示,找到Intellij配置中的SystemSettings,右边的Reopenlastprojectonstartup,默认为勾选状态,即每次打开IDE时......
  • 技术文档 | 使用 OpenSCA 批量扫描 Gitlab 仓库,盘点资产安心过节
    按照下述教程快速批量扫描您的仓库,一旦新的攻击或0Day出现,通过资产清单即可快速定位漏洞及影响范围、有效缩短响应时间。安装opensca-cli方法一:一键安装-Windows(需要PowerShell)iex"&{$(irmhttps://raw.githubusercontent.com/XmirrorSecurity/OpenSCA-cli/master/script......
  • vue3 使用 html5-qrcode 实现扫描二维码功能
    1.安装npm安装npminstall--save-devhtml5-qrcode或直接引入<scriptsrc="https://unpkg.com/html5-qrcode"type="text/javascript">2.引入根据需求自定义渲染QRscanningUI的容器。<divid="reader"width="600px"></div&......
  • windows11系统下ppt突然打不开,报错“PowerPoint启动时提示上次启动失败是否启用安全模
    问题描述:windows11系统下ppt突然打不开,报错:PowerPoint启动时提示上次启动失败是否启用安全模式...ppt文件是正常的,我发到其他设备上是可以正常打开的。我把office卸载了用腾讯文档也无法打开ppt文件。点击用安全模式打开后无反应,即无错误提示也没有打开ppt。以上情况说明:......
  • 扫描线学习笔记
    1.引入扫描线多用于图形上,是一条线在图形上扫来扫去,它一般被用来解决图形面积,周长,以及二维数点等问题。2.扫描线求面积并如下图:我们模拟一条扫描线,使它从下往上扫过整个平面,这条扫描线会在遇到横向线段的时候停下来更新一些东西。那么整个图形就可以找出四条线段,如图:更新的......
  • 元宵节家里煮了多少汤圆?合合信息扫描全能王“拍照计数”一键盘点
    元宵将至,新春节庆氛围浓厚依旧。厨房里,餐桌上,一碗碗热气腾腾的汤圆、皮薄馅足的饺子,织就了年节温暖幸福的画面。近期,合合信息旗下扫描全能王APP“拍照计数”功能获得广大用户的关注。该功能基于图像AI技术,可以对图片中用户指定的目标物体进行统计,快速“点出”出图片中的物体数量......
  • stm32单片机扫码设计方案,ESP32蓝牙无线扫码器设计项目硬件套件的实现,一维码二维码识别
    stm32/ESP32(或ESP32C3,ESP32S3)/ESP8266单片机扫码识别设计方案二维码一维码扫描模块开发项目资料程序,轻松实现蓝牙扫码器WiFi无线串口,二维码识别显示器串口输出条码扫描枪扫码枪开发项目套件设计,很适合DIY无需焊接,到手即可开发调试。ESP32,ESP8266等基于arduino库实现,stm32基于......
  • 用 C# framework2.0 写一个电脑安全扫描
    编写一个电脑安全扫描工具是一个相对复杂的任务,因为它需要涉及到很多不同的方面,如系统监控、进程分析、文件扫描、注册表检查等。在C#中,.NETFramework2.0提供了很多类库,可以用来构建这样的工具,但它并不是为此目的而专门设计的。在较新的.NET版本中,例如.NETCore或.NET5/6,会有......