我有以下存储库和类;
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
答案 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)
基本上要为启动注入一些服务,您需要在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(){}