.NET Core 2 - 来自Startup的Call Repository方法

时间:2018-02-06 00:40:38

标签: c# asp.net-core .net-core asp.net-core-2.0

我有以下存储库和类;

public interface IValueService
{
    GetAll();
}

public class ValueService : IValueService
{
    private DataContext _context;

    public ValueService(DataContext context)
    {
        _context = context;            
    }

    public GetAll()
    {
       // do something
    }
}

在我的Startup.cs中;

services.AddScoped<IValueService, ValueService>();

我如何从Startup或其他类调用方法GetAll()?

编辑:回答; .NET Core 2 - Create instance of controller class which has a repository

4 个答案:

答案 0 :(得分:3)

要呼叫GetAll(),您需要先拥有一个实例,无论在哪里。因此,如果您想在Startup.cs中调用它,则必须先创建一个对象,然后再调用它。

对于要调用GetAll()的其他类,您需要将IValueService指定为构造函数的参数之一,然后在构造函数中,将IValueService实例保留在本地私有属性中。此私有属性可以在同一个类中的其他方法中使用。

对于.NetCore 2依赖注入,请单击MSDN Link以获取更多详细信息。

答案 1 :(得分:0)

在您要使用的控制器或类中添加以下代码:

public class MyController : Controller
{
    private readonly IValueService _valueServiceRepository;

    public MyController (IValueService _valueServiceRepository)
    {
        _valueServiceRepository = valueServiceRepository;
    }

}

现在您可以使用_valueServiceRepository.GetAll()。

答案 2 :(得分:0)

本文可以提供帮助:https://medium.com/@mattmazzola/asp-net-core-injecting-custom-data-classes-into-startup-classs-constructor-and-configure-method-7cc146f00afb

基本上要为启动注入一些服务,您需要在ConfigureServices链中调用UseStartup之前致电WebHostBuilder()

var host = new WebHostBuilder()
.ConfigureServices(servicesCollection =>
{
    servicesCollection.AddSingleton<IValueService>(new ValueService(context));
})
.UseStartup<Startup>()
.Build();

如果注入启动构造函数,那么您的服务将得到解决:

    public class Startup
    {
        public Startup(IConfiguration configuration, IHostingEnvironment env, IValueService service)
        {
           //service.GetAll();
        }
    }

答案 3 :(得分:-1)

你应该先为你的班级新生

ValueService VS=new ValueService();
VS.GetAll(); 

如果您不想要新课程,可以使用“静态”

public static GetAll(){}