C# 实现接口以在应用程序启动时运行代码

C# 实现接口以在应用程序启动时运行代码,c#,asp.net-mvc,C#,Asp.net Mvc,很抱歉给你们添麻烦了,我把它改成了一个新问题: 这可能是一个非常简单的问题,但是在启动时使用方法的接口的最佳方式是什么。实现此接口时,OnStartup()代码应在应用程序启动时运行 编辑:我实际上正在尝试创建一个HttpModule或其他东西,这样当我实现这个模块的一个特定类时,这个类将有一个方法,通过重写这个方法,我将能够在应用程序启动时运行它的代码 我唯一的问题是我不想直接从应用程序的启动方法调用任何代码 另外,如果有一个nuget包可用于此,请告诉我名称。您不能通过实现接口来运行任何代

很抱歉给你们添麻烦了,我把它改成了一个新问题:


这可能是一个非常简单的问题,但是在启动时使用方法
的接口的最佳方式是什么。实现此接口时,
OnStartup()
代码应在应用程序启动时运行

编辑:我实际上正在尝试创建一个HttpModule或其他东西,这样当我实现这个模块的一个特定类时,这个类将有一个方法,通过重写这个方法,我将能够在应用程序启动时运行它的代码

我唯一的问题是我不想直接从应用程序的启动方法调用任何代码


另外,如果有一个nuget包可用于此,请告诉我名称。

您不能通过实现接口来运行任何代码,您可以强制您的类实现启动时的
方法的代码

interface IOnStartup
{
    void OnStartup();
}

class MyClass : IOnStartup
{
    public void OnStartup()
    {
       // your code for OnStartUp method
       // you are forced to implement the code for this method because your class implement IOnStartup
    }
}
或者,您可以定义一个实现此代码的抽象类,并从该抽象类继承所有应该具有该方法的类

abstract class OnStartUpClass
{
    public void OnStartup()
    {
        // the code for this method
    }
}

class MyClass : OnStartUpClass
{
    // implement code for this class
    // you already have this method in your class
}

我认为通过实现一个接口是无法实现的。您应该选择另一种方法。

您不能通过实现接口来运行任何代码,您可以强制您的类在启动时实现
方法的代码

interface IOnStartup
{
    void OnStartup();
}

class MyClass : IOnStartup
{
    public void OnStartup()
    {
       // your code for OnStartUp method
       // you are forced to implement the code for this method because your class implement IOnStartup
    }
}
或者,您可以定义一个实现此代码的抽象类,并从该抽象类继承所有应该具有该方法的类

abstract class OnStartUpClass
{
    public void OnStartup()
    {
        // the code for this method
    }
}

class MyClass : OnStartUpClass
{
    // implement code for this class
    // you already have this method in your class
}

我认为通过实现一个接口是无法实现的。您应该选择另一种方法。

您不能通过实现接口来运行任何代码,您可以强制您的类在启动时实现
方法的代码

interface IOnStartup
{
    void OnStartup();
}

class MyClass : IOnStartup
{
    public void OnStartup()
    {
       // your code for OnStartUp method
       // you are forced to implement the code for this method because your class implement IOnStartup
    }
}
或者,您可以定义一个实现此代码的抽象类,并从该抽象类继承所有应该具有该方法的类

abstract class OnStartUpClass
{
    public void OnStartup()
    {
        // the code for this method
    }
}

class MyClass : OnStartUpClass
{
    // implement code for this class
    // you already have this method in your class
}

我认为通过实现一个接口是无法实现的。您应该选择另一种方法。

您不能通过实现接口来运行任何代码,您可以强制您的类在启动时实现
方法的代码

interface IOnStartup
{
    void OnStartup();
}

class MyClass : IOnStartup
{
    public void OnStartup()
    {
       // your code for OnStartUp method
       // you are forced to implement the code for this method because your class implement IOnStartup
    }
}
或者,您可以定义一个实现此代码的抽象类,并从该抽象类继承所有应该具有该方法的类

abstract class OnStartUpClass
{
    public void OnStartup()
    {
        // the code for this method
    }
}

class MyClass : OnStartUpClass
{
    // implement code for this class
    // you already have this method in your class
}

我认为通过实现一个接口是无法实现的。您应该选择另一种方法。定义接口和类:

interface IOnStartup
{
    void OnStartup();
}

class YourClass : IOnStartup
{
    public void OnStartup()
    {
    }
}
外接程序Global.asax

public void Application_OnStart() 
{
    var cls = new YourClass();
    cls.OnStartup();
}

定义接口和类:

interface IOnStartup
{
    void OnStartup();
}

class YourClass : IOnStartup
{
    public void OnStartup()
    {
    }
}
外接程序Global.asax

public void Application_OnStart() 
{
    var cls = new YourClass();
    cls.OnStartup();
}

定义接口和类:

interface IOnStartup
{
    void OnStartup();
}

class YourClass : IOnStartup
{
    public void OnStartup()
    {
    }
}
外接程序Global.asax

public void Application_OnStart() 
{
    var cls = new YourClass();
    cls.OnStartup();
}

定义接口和类:

interface IOnStartup
{
    void OnStartup();
}

class YourClass : IOnStartup
{
    public void OnStartup()
    {
    }
}
外接程序Global.asax

public void Application_OnStart() 
{
    var cls = new YourClass();
    cls.OnStartup();
}

如果我理解正确,如果有一个类实现了给定的接口,那么您希望该类被实例化,并调用它的OnStartup方法。如果这就是你想要做的,那么你必须依靠反思

在Application_Start中调用一个方法,该方法将加载程序集中存在的所有类型,并检查其中是否有任何类型实现了该接口。如果找到,您可以实例化它的一个实例并调用该类上的方法

如果您想在不重新编译自己的应用程序的情况下动态添加该类,那么它会变得更复杂,需要创建AppDomains,但这也是可行的

编辑

关于stackoverflow的这个问题告诉您如何获取实现接口的所有类:


如果我理解正确,如果有一个类实现了给定的接口,那么您希望该类被实例化,并调用它的OnStartup方法。如果这就是你想要做的,那么你必须依靠反思

在Application_Start中调用一个方法,该方法将加载程序集中存在的所有类型,并检查其中是否有任何类型实现了该接口。如果找到,您可以实例化它的一个实例并调用该类上的方法

如果您想在不重新编译自己的应用程序的情况下动态添加该类,那么它会变得更复杂,需要创建AppDomains,但这也是可行的

编辑

关于stackoverflow的这个问题告诉您如何获取实现接口的所有类:


如果我理解正确,如果有一个类实现了给定的接口,那么您希望该类被实例化,并调用它的OnStartup方法。如果这就是你想要做的,那么你必须依靠反思

在Application_Start中调用一个方法,该方法将加载程序集中存在的所有类型,并检查其中是否有任何类型实现了该接口。如果找到,您可以实例化它的一个实例并调用该类上的方法

如果您想在不重新编译自己的应用程序的情况下动态添加该类,那么它会变得更复杂,需要创建AppDomains,但这也是可行的

编辑

关于stackoverflow的这个问题告诉您如何获取实现接口的所有类:


如果我理解正确,如果有一个类实现了给定的接口,那么您希望该类被实例化,并调用它的OnStartup方法。如果这就是你想要做的,那么你必须依靠反思

在Application_Start中调用一个方法,该方法将加载程序集中存在的所有类型,并检查其中是否有任何类型实现了该接口。如果找到,您可以实例化它的一个实例并调用该类上的方法

如果您想在不重新编译自己的应用程序的情况下动态添加该类,那么它会变得更复杂,需要创建AppDomains,但这也是可行的

编辑

关于stackoverflow的这个问题告诉您如何获取实现接口的所有类:


我会使用像Autofac、Ninject和Unity这样的IOC容器。然后,您可以向框架注册接口,并使用服务定位器返回实现该接口的类的所有实例