Studio
2023.10
False
Bannerhintergrundbild
Studio-Benutzerhandbuch
Letzte Aktualisierung 26. Apr. 2024

Registrieren von benutzerdefinierten Diensten

Um Ihre codierten Automatisierungen zu verbessern, sollten Sie benutzerdefinierte Dienste registrieren. Durch die Registrierung eines benutzerdefinierten Dienstes können Sie ihn global in Ihrem Projekt verwenden. So ist er nicht nur in einer einzelnen codierten Automatisierung, sondern in allen codierten Automatisierungen innerhalb Ihres Projekts zugänglich.
  1. Erstellen Sie eine Codequelldatei und definieren Sie eine öffentliche Schnittstelle, die als der Dienst benannt ist, den Sie erstellen möchten.
    In dieser Schnittstelle sollten die Methoden aufgeführt sein, die Sie mit Ihrem benutzerdefinierten Dienst verwenden möchten. Jede Methode muss in eine separate Klasse implementiert werden, welche die gleiche Datei erbt, in der Sie die Schnittstelle definieren.
    In diesem Beispiel benennen Sie die Schnittstelle IMyService und rufen Sie die darin enthaltene Methode DoMyMethod auf.
    {
        public interface IMyService
        {
            void DoMyMethod();
        }
    }{
        public interface IMyService
        {
            void DoMyMethod();
        }
    }
  2. Fahren Sie mit einer anderen Codequelldatei fort und implementieren Sie die Methoden aus der zuvor erstellten Schnittstelle.
    Diese Klasse muss von der gleichen Codequelldatei erben, in der die öffentliche Schnittstelle erstellt wurde.
    In diesem Beispiel implementieren Sie die Methode DoMyMethod, um den Wert einer Variablen auszugeben.
    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);
            }
        }
    }
  3. Erstellen Sie eine partielle Klasse, um Ihren benutzerdefinierten Dienst zu umschließen, sodass er von jedem codierten Workflow aus zugänglich ist, der diese Klasse erbt.
    1. Erstellen Sie eine weitere Codequelldatei und deklarieren Sie die öffentliche partielle Klasse mit dem Namen Coded Workflow. Lassen Sie diese Klasse die Klasse CodedWorkflowBase erben.
    2. Erstellen Sie eine „get-only“-Eigenschaft (nur Abrufen) für Ihren erstellten benutzerdefinierten Dienst, die den Zugriff auf eine Instanz der Dienstschnittstelle ermöglicht.
      Die Instanz wird per Abhängigkeitsinjektion mit der Methode serviceContainer.Resolve<IMyService>() abgerufen. Dies bietet eine Möglichkeit, mit dem benutzerdefinierten Dienst in der partiellen Klasse zu interagieren.
      public IMyService myService { get => serviceContainer.Resolve<IMyService>()};public IMyService myService { get => serviceContainer.Resolve<IMyService>()};
    3. Erweitern Sie Ihre Klasse weiter, indem Sie die Methode RegisterServices hinzufügen.
      By invoking this method, you register your custom service within the UiPath® service container.
      protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
      		{
      			serviceLocator.RegisterType<IMyService, MyService>();
      		}protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
      		{
      			serviceLocator.RegisterType<IMyService, MyService>();
      		}
      Sie können auch RegisterInstance anstatt RegisterType verwenden. Überprüfen Sie die folgenden Unterschiede zwischen den beiden Implementierungen und ihren Signaturmethoden:
      • RegisterType – Wenn Sie RegisterType verwenden, geben Sie den Container an, um jedes Mal eine neue Kopie oder Instanz Ihres Dienstes zu erstellen, wenn Sie ihn aufrufen. RegisterType gibt eine Blaupause an, auf deren Grundlage jedes Mal ein neuer Dienst erstellt werden soll.
        • TService: Das ist der Dienstschnittstellentyp, der vom Dienst genutzt wird. Es ist die Schnittstelle, die Sie für Ihren Dienst erstellen. In diesem Beispiel ist das IMyService.
        • TServiceImplementation: Das ist die Klasse, die die TService-Schnittstelle implementiert. Die Klasse wird erstellt, wenn ein Dienst des Typs TService angefordert wird.
        • registrationType: Dieser wird standardmäßig auf CodeServiceRegistrationType.Singleton festgelegt. Damit wird die Richtlinie zur Dienstregistrierung festgelegt.
        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 – Wenn Sie RegisterInstance verwenden, bieten Sie dem Container eine einsatzbereite Instanz dieses Dienstes an, den Sie bereits zuvor erstellt haben. Jedes Mal, wenn Sie den Dienst aufrufen, gibt der Container genau diesen vorgefertigten Dienst zurück. RegisterInstance gibt eine genaue Kopie des Dienstes zurück, den Sie erstellt haben.
        • TServiceImplementation: Das ist die einsatzbereite Instanz einer Klasse, die Sie bereits erstellt haben. Diese Instanz wird zurückgegeben, wenn ein Dienst dieses Typs aufgelöst werden muss. In diesem Beispiel: MySecondService.
        • serviceTypes: Das ist ein Array von Typen, mit denen die Instanz verfügbar ist, wenn sie aufgerufen wird.
        void RegisterInstance<TServiceImplementation>(TServiceImplementation instance, params Type[] serviceTypes) 
                    where TServiceImplementation : class;void RegisterInstance<TServiceImplementation>(TServiceImplementation instance, params Type[] serviceTypes) 
                    where TServiceImplementation : class;
    Das folgende Code-Snippet zeigt ein Beispiel dafür, wie die öffentliche partielle Klasse implementiert wurde:
    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);
    		}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);
    		}

Nächste Schritte

Um den von Ihnen erstellten benutzerdefinierten Dienst zu verwenden, verweisen Sie auf den Namespace dieses Dienstes in der Datei, an der Sie arbeiten, indem Sie die Anweisung using verwenden. Der Namespace des benutzerdefinierten Dienstes stellt den Namen des Projekts und den Namen der Ordner/Unterordner dar, in denen sich die .cs-Datei möglicherweise befindet. Das Format des Namespace ist wie folgt: <ProjectName>.<Folder>.<SubFolder>
Wenn Sie beispielsweise einen benutzerdefinierten Dienst innerhalb eines Projekts namens GeneralCustomServices im Ordner MyCustomService erstellen, dann lautet der Namespace dieses Dienstes: GeneralCustomServices.MyCustomService.
  • Nächste Schritte

War diese Seite hilfreich?

Hilfe erhalten
RPA lernen – Automatisierungskurse
UiPath Community-Forum
UiPath Logo weiß
Vertrauen und Sicherheit
© 2005-2024 UiPath. All rights reserved.