要增强编码自动化,请考虑注册自定义服务。通过注册自定义服务,您便可在项目中全局使用该服务。这样,它不仅可以在单个编码自动化中访问,还可以在项目中的所有编码自动化中访问。
         
         
         
            创建一个代码源文件,并将一个公共接口定义为您要创建的服务。 此界面应列出您打算与自定义服务一起使用的方法。 每种方法都必须在单独的类中实现,该类将继承用于定义接口的同一文件。
               
               在此示例中,将接口命名为 IMyService,并在其中调用方法 DoMyMethod。
               
               assignment { 
    public  interface  IMyService 
    { 
        void  DoMyMethod ( ) ; 
    } 
} {
    public interface IMyService
    {
        void DoMyMethod();
    }
}  
             
            
            转到另一个代码源文件,并实现先前创建的接口中的方法。 此类必须继承自创建公共接口的同一个代码源文件。
               在此示例中,实现 DoMyMethod 方法以输出变量的值。
               
               assignment public  class  MyService  :  IMyService
    { 
        public  void  DoMyMethod ( ) 
        { 
            var  a =  "hello world" ; 
            Console. WriteLine ( a) ; 
        } 
    } 
} public class MyService : IMyService
    {
        public void DoMyMethod()
        {
            var a = "hello world";
            Console.WriteLine(a);
        }
    }
}  
             
            
            构建一个部分类来包装您的自定义服务,以便从继承此类的任何编码工作流访问它。 
                  创建另一个代码源文件,并声明名为 Coded Workflow 的公共部分类。使此类继承 CodedWorkflowBase 类。  
                  
                  为您创建的自定义服务创建“仅获取”属性,该属性允许访问服务接口的实例。  使用 serviceContainer.Resolve<IMyService>() 方法通过依赖项注入获取实例。这提供了一种与部分类中的自定义服务交互的方法。
                     
                     assignment public  IMyService myService {  get   =>  serviceContainer. Resolve< IMyService> ( ) } ; public IMyService myService { get => serviceContainer.Resolve<IMyService>()};  
                   
                  
                  通过添加 RegisterServices 方法进一步扩展您的类。 通过调用此方法,您可以在 UiPath 服务容器中注册自定义服务。
                     assignment protected  override void  RegisterServices ( ICodedWorkflowsServiceLocator serviceLocator ) 
		{ 
			serviceLocator. RegisterType< IMyService,  MyService> ( ) ; 
		} protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
		{
			serviceLocator.RegisterType<IMyService, MyService>();
		}  
                     您也可以使用 
RegisterInstance 代替 
RegisterType。检查两个实现及其签名方法之间的以下区别:
                        
                           RegisterType  - 使用 RegisterType 时,请指定容器以在每次调用服务时创建新的服务副本或实例。RegisterType 提供一个可遵循的蓝图,每次都根据该蓝图构建新服务。
                              
                                 TService:这是服务将使用的服务接口类型。这是您为服务创建的接口。在此示例中,为 IMyService。
                                  
                                 
                                 TServiceImplementation:这是实现 TService 接口的类。该类是在请求 TService 类型的服务时创建的。
                                  
                                 
                                 registrationType:这默认为 CodeServiceRegistrationType.Singleton。它设置服务注册策略。
                                  
                                 
                               
                              
                              assignment void  RegisterType< TService,  TServiceImplementation> ( CodeServiceRegistrationType registrationType =  CodeServiceRegistrationType. Singleton) 
            where TService :  class 
            where  TServiceImplementation  :  class ,  TService; void RegisterType<TService, TServiceImplementation>(CodeServiceRegistrationType registrationType = CodeServiceRegistrationType.Singleton)
            where TService : class
            where TServiceImplementation : class, TService;  
                              
                            
                           
                           RegisterInstance  - 使用 RegisterInstance 时,您将为容器提供之前已创建的该服务的现成实例。每次调用服务时,容器都会返回此确切的预制服务。RegisterInstance 将返回您创建的服务的精确副本。
                              
                                 TServiceImplementation:这是您已创建的类的现成实例。每当需要解析此类型的服务时,系统都会返回此实例。在此示例中,为 MySecondService。
                                  
                                 
                                 serviceTypes:这表示在调用实例时,实例将作为哪些类型可用。
                                  
                                 
                               
                              
                              assignment void  RegisterInstance< TServiceImplementation> ( TServiceImplementation instance,  params Type[ ]  serviceTypes)  
            where TServiceImplementation :  class ; void RegisterInstance<TServiceImplementation>(TServiceImplementation instance, params Type[] serviceTypes) 
            where TServiceImplementation : class;  
                              
                            
                           
                         
                        
                      
                   
                  
                
               
               下面的代码片段显示了如何实现
公共部分类的
示例:
assignment public  partial class  CodedWorkflow  :  CodedWorkflowBase
    { 
		public  IMyService myService {  get   =>  serviceContainer. Resolve< IMyService> ( )  ;  } 
		
		protected  override void  RegisterServices ( ICodedWorkflowsServiceLocator serviceLocator ) 
		{ 
                    
			serviceLocator. RegisterType< IMyService,  MyService> ( ) ; 
                    
                    var  secondService =  new  MySecondService ( ) ; 
                    serviceLocator. RegisterInstance< MySecondService> ( secondService) ; 
		} public partial class CodedWorkflow : CodedWorkflowBase
    {
		public IMyService myService { get => serviceContainer.Resolve<IMyService>() ; }
		
		protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
		{
                    // Implementation using 'RegisterType'
			serviceLocator.RegisterType<IMyService, MyService>();
                    // Implementation using 'RegisterInstance'
                    var secondService = new MySecondService();
                    serviceLocator.RegisterInstance<MySecondService>(secondService);
		}  
             
            
          
         
         
            
            要使用您创建的自定义服务,请使用 using 语句在正在处理的文件中引用该服务的命名空间。自定义服务的命名空间表示项目名称以及 .cs 文件可能所在的文件夹/子文件夹的名称。命名空间的格式如下:<ProjectName>.<Folder>.<SubFolder>
            
            例如,如果您在 MyCustomService 文件夹内名为 GeneralCustomServices 的项目中创建自定义服务,则该服务的命名空间为:GeneralCustomServices.MyCustomService。