如何在 ASP.Net 样板 MVC 项目中从 Web Api 调用应用程序服务?
How to Call Application service from Web Api in ASP.Net Boilerplate MVC project?
ASP.NET 样板(.Net Framework v4.7.2 和 MVC)
我正在为应用程序服务 class(AgentInfoAppService) 创建网络 api 控制器 (AgentInfoController),它依赖于存储库 IAgentInfoRepository。从 AgentInfoController 中,我可以通过在构造函数中传递 IAgentInfoRepository 来调用 AgentInfoAppService 的方法 new AgentInfoAppService(_agentInfoRepository).GetAgentCampaignswithCode
但我不确定这是否正确?
我们有一个来自 mvc 层的工作代码,我们在其中调用应用程序服务 class(动态网络 api 层),而不添加任何对存储库的引用,如下所示。有没有一种方法可以添加依赖项注入,这样我就不必在来自 web api 层的每个应用程序服务调用中添加存储库?请指教。
jQuery.ajax({
url: "/api/services/app/AgentInfoAppService/GetAgentCampaignswithCode?agentCode=100",
type: "GET",
contentType: "application/json; charset=utf-8"
})
public class AgentInfoAppService : ApplicationService, IAgentInfoAppService
{
private readonly IAgentInfoRepository _agentInfoRepository;
public AgentInfoAppService(IAgentInfoRepository agentInfoRepository)
{
_agentInfoRepository = agentInfoRepository;
}
public GetAgentCodeCampaignOutput GetAgentCampaignswithCode(string agentCode, bool? defaultCampaign)
{
var agentCampaigns = _agentInfoRepository.GetAgentCampaignswithCode(agentCode, defaultCampaign);
return new GetAgentCodeCampaignOutput()
{
AgentCodeCampaign = Mapper.Map<List<AgentCodeCampaignDto>>(agentCampaigns)
};
}
}
public class AgentInfoController : AbpApiController
{
private readonly IAgentInfoRepository _agentInfoRepository;
[HttpGet]
public GetAgentCodeCampaignOutput GetAgentCampaignswithCode(string agentCode, bool? defaultCampaign)
{
return new AgentInfoAppService(_agentInfoRepository).GetAgentCampaignswithCode(agentCode, defaultCampaign);
}
}
当您 运行 项目 Abp
从 ApplicationService
层创建所有方法,您可以使用它。您无需在控制器中再次创建该方法。
这是我所说的例子
我有一个ApplicationServie
这样的方法
public class CiudadAppService : AsyncCrudAppService<AdozonaCiudad, CiudadDto, int, PagedAndSortedRequest, CiudadDto, CiudadDto>, ICiudadAppService
{
private readonly ICiudadManager _ciudadManager;
public CiudadAppService(IRepository<AdozonaCiudad> repository, ICiudadManager ciudadManager) : base(repository)
{
_ciudadManager = ciudadManager;
}
public override async Task<CiudadDto> CreateAsync(CiudadDto input)
{
var result = await _ciudadManager.RegistrarOActualizar(ObjectMapper.Map<AdozonaCiudad>(input));
return MapToEntityDto(result);
}
}
在这个 AppService
中,我有一个方法叫做 CreateAsync
这个方法可以像这样从 javascript 使用。
(function ($) {
var _ciudadService = abp.services.app.ciudad;
var _$form = $('form[name=Index]');
function save() {
_$form.validate({
invalidHandler: function (form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
var firstInvalidElement = $(validator.errorList[0].element);
$('html,body').scrollTop(firstInvalidElement.offset().top - 100);
firstInvalidElement.focus();
}
},
rules: {
Ciudad: "required"
},
messages: {
Ciudad: "El valor del campo es requerido"
},
highlight: function (element) {
$(element).parent().addClass('error-validation')
},
unhighlight: function (element) {
$(element).parent().removeClass('error-validation')
}
});
if (!_$form.valid()) {
return;
}
var ciudad = _$form.serializeFormToObject(); //serializeFormToObject is defined in main.js
abp.ui.setBusy(_$form);
_ciudadService.create(ciudad).done(function () {
location.reload(true); //reload page to see edited role!
abp.notify.success('Registro correcto');
$(".save-button").html('Guardar');
}).always(function () {
abp.ui.clearBusy(_$form);
});
}
}
如您所见,重要的部分是:var _ciudadService = abp.services.app.ciudad;
您正在创建一个服务,您可以访问 ApplicationService
中的所有方法
希望对您有所帮助,如有需要请留言!
ASP.NET 样板(.Net Framework v4.7.2 和 MVC)
我正在为应用程序服务 class(AgentInfoAppService) 创建网络 api 控制器 (AgentInfoController),它依赖于存储库 IAgentInfoRepository。从 AgentInfoController 中,我可以通过在构造函数中传递 IAgentInfoRepository 来调用 AgentInfoAppService 的方法 new AgentInfoAppService(_agentInfoRepository).GetAgentCampaignswithCode
但我不确定这是否正确?
我们有一个来自 mvc 层的工作代码,我们在其中调用应用程序服务 class(动态网络 api 层),而不添加任何对存储库的引用,如下所示。有没有一种方法可以添加依赖项注入,这样我就不必在来自 web api 层的每个应用程序服务调用中添加存储库?请指教。
jQuery.ajax({
url: "/api/services/app/AgentInfoAppService/GetAgentCampaignswithCode?agentCode=100",
type: "GET",
contentType: "application/json; charset=utf-8"
})
public class AgentInfoAppService : ApplicationService, IAgentInfoAppService
{
private readonly IAgentInfoRepository _agentInfoRepository;
public AgentInfoAppService(IAgentInfoRepository agentInfoRepository)
{
_agentInfoRepository = agentInfoRepository;
}
public GetAgentCodeCampaignOutput GetAgentCampaignswithCode(string agentCode, bool? defaultCampaign)
{
var agentCampaigns = _agentInfoRepository.GetAgentCampaignswithCode(agentCode, defaultCampaign);
return new GetAgentCodeCampaignOutput()
{
AgentCodeCampaign = Mapper.Map<List<AgentCodeCampaignDto>>(agentCampaigns)
};
}
}
public class AgentInfoController : AbpApiController
{
private readonly IAgentInfoRepository _agentInfoRepository;
[HttpGet]
public GetAgentCodeCampaignOutput GetAgentCampaignswithCode(string agentCode, bool? defaultCampaign)
{
return new AgentInfoAppService(_agentInfoRepository).GetAgentCampaignswithCode(agentCode, defaultCampaign);
}
}
当您 运行 项目 Abp
从 ApplicationService
层创建所有方法,您可以使用它。您无需在控制器中再次创建该方法。
这是我所说的例子
我有一个ApplicationServie
这样的方法
public class CiudadAppService : AsyncCrudAppService<AdozonaCiudad, CiudadDto, int, PagedAndSortedRequest, CiudadDto, CiudadDto>, ICiudadAppService
{
private readonly ICiudadManager _ciudadManager;
public CiudadAppService(IRepository<AdozonaCiudad> repository, ICiudadManager ciudadManager) : base(repository)
{
_ciudadManager = ciudadManager;
}
public override async Task<CiudadDto> CreateAsync(CiudadDto input)
{
var result = await _ciudadManager.RegistrarOActualizar(ObjectMapper.Map<AdozonaCiudad>(input));
return MapToEntityDto(result);
}
}
在这个 AppService
中,我有一个方法叫做 CreateAsync
这个方法可以像这样从 javascript 使用。
(function ($) {
var _ciudadService = abp.services.app.ciudad;
var _$form = $('form[name=Index]');
function save() {
_$form.validate({
invalidHandler: function (form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
var firstInvalidElement = $(validator.errorList[0].element);
$('html,body').scrollTop(firstInvalidElement.offset().top - 100);
firstInvalidElement.focus();
}
},
rules: {
Ciudad: "required"
},
messages: {
Ciudad: "El valor del campo es requerido"
},
highlight: function (element) {
$(element).parent().addClass('error-validation')
},
unhighlight: function (element) {
$(element).parent().removeClass('error-validation')
}
});
if (!_$form.valid()) {
return;
}
var ciudad = _$form.serializeFormToObject(); //serializeFormToObject is defined in main.js
abp.ui.setBusy(_$form);
_ciudadService.create(ciudad).done(function () {
location.reload(true); //reload page to see edited role!
abp.notify.success('Registro correcto');
$(".save-button").html('Guardar');
}).always(function () {
abp.ui.clearBusy(_$form);
});
}
}
如您所见,重要的部分是:var _ciudadService = abp.services.app.ciudad;
您正在创建一个服务,您可以访问 ApplicationService
希望对您有所帮助,如有需要请留言!