Sonntag, Juni 7, 2020

müssen call-controller die action-Methode in eine andere Klasse in c# mvc

Erstellt habe ich eine Methode in einem controller, aber ich brauche Sie zum aufrufen dieser Methode in andere Klasse und ich weiß nicht, wie Sie es nennen.

mein Beispielcode :-

  public class ReportController : BaseController
    {
        private readonly IPermissionService _permissionService;
        private readonly ICompaniesService _companyService;

       public ReportController(IPermissionService permissionService,
            ICompaniesService companyService)
       {
            this._permissionService = permissionService;
            this._companyService = companyService;
       }

        public void Reporting()
        {
            //code
        }
      }


    public class Home {

        public void Execute()
        {
            //I need to execute the Reporting method here
        }

    }

Ich habe versucht, viele Dinge zu nennen, meine Methode in eine andere Klasse, Methode, aber ich kann nicht ankommen es zu wirken.

new ReportController().Reporting();
Mögliche Duplikate von Wie man den Aufruf der Methode eine weitere in der Klassen C#?
Ist es möglich für Sie zu erstellen Reporting-Methode als statische?

InformationsquelleAutor Sangeet Shah | 2016-04-25

3 Kommentare

  1. 4

    Es ist ein schlechtes design Weg, um einige code im controller, die aufgerufen werden, an mehreren stellen. Erstellen Sie eine Klasse in Ihrem Projekt oder in einer externen DLL, die diesen code enthält, und rufen Sie diese Klasse in den Controllern, müssen diese Methode.

    Erstellen Sie eine Klasse, die irgendwo (im Projekt oder in eine Bibliothek-Klasse) :

    public class MyClass
    {
        public MyClass()
        {}
    
        public void MyMethod()
        {
          //Some code here
        }
    }

    Und implementieren Sie diesen code in Ihre Steuerungen oder Klassen, die brauchen das.

    public class ReportController : BaseController
        {
            private readonly IPermissionService _permissionService;
            private readonly ICompaniesService _companyService;
    
           public ReportController(IPermissionService permissionService,
                ICompaniesService companyService)
           {
                this._permissionService = permissionService;
                this._companyService = companyService;
           }
    
            public void Reporting()
            {
                MyClass myClass = new MyClass();
                myClass.MyMethod();
            }
    }

    Übrigens, wenn Ihr code braucht keine Instanz, können Sie eine statische Klasse, wie :

    public static class MyClass
    {
        public static void MyMethod()
        {
           //Some code here
        }
    }
    
    public class ReportController : BaseController
    {
           private readonly IPermissionService _permissionService;
           private readonly ICompaniesService _companyService;
    
           public ReportController(IPermissionService permissionService,
                ICompaniesService companyService)
           {
                this._permissionService = permissionService;
                this._companyService = companyService;
           }
    
            public void Reporting()
            {
                MyClass.MyMethod();
            }
    }

    InformationsquelleAutor AdrienTorris

  2. 2

    Es gibt zwei Möglichkeiten, dies zu erreichen. Sie sind mit dependency injection in den controller-Konstruktor, so haben Sie zwei Möglichkeiten, dies zu tun (nicht sicher, ob ich verpasst haben?):

    • Erstellen Sie eine Instanz der Ihre Dienste in der aufrufenden Methode, und übergeben Sie diese Instanzen durch, beim instanziieren des Controllers, oder
    • Fügen Sie einen Konstruktor zu Ihrem Haus-Klasse, die Dienste und geben Sie Sie durch, wenn instanzieren der controller

    Option 1:

    public class Home
    {
         public void Execute()
         {
              //Create the variables that are needed by the constructor
              IPermissionService permissionService = new PermissionService();
              ICompaniesService companiesService = new CompaniesService();
    
              //Create an instance of your controller and pass through
              //the variables created above
              ReportController reportController = new ReportController(permissionService, companiesService);
    
              //Now that you have an instance of your controller call the method
              reportController.Reporting();
         }
    }

    Es funktioniert nach dem gleichen Prinzip wie die Erstellung einer Instanz einer Klasse und dann seine Methoden aufrufen.

    Option 2:

    public class Home
    {
         private IPermissionService permissionService;
         private ICompaniesService companiesService;
    
         public Home(IPermissionService permissionService, ICompaniesService companiesService)
         {
              this.permissionService = permissionService;
              this.companiesService = companiesService;
         }
    
         public void Execute()
         {
              ReportController reportController = new ReportController(permissionService, companiesService);
    
              reportController.Reporting();
         }
    }
    Aber es ist nicht eine gute Idee, um Methoden im controller die verwendet werden können, an verschiedenen Orten.
    Es ist nicht mein code 🙂 Sage das den OP..

    InformationsquelleAutor Brendan Vogt

  3. 0
    ReportController reportController = new ReportController();
    reportController.Reporting();

    Als jede andere Klasse, die die Methode nicht statisch ist

    Bitte Lesen Sie diese Antwort, Sie gehen in ein viel mehr Details als ich

    in parametrisieren contructure ich kippe Kiste-Objekt der controller-und auch ich habe zu implementieren BaseController Methode in den Berichts-Controller, so kann ich nicht erstellen-Objekt direkt
    Sie sollten die Verwendung DI-Bibliothek, oder erstellen Sie eine neue Instanz für jeden Parameter , den Sie verwenden können StructureMap seine Rost

    InformationsquelleAutor Draken

Kostenlose Online-Tests