Ich habe die ASP.NET MVC mit AngularJS und Entity Framework, Modul Null Probe heruntergeladen. Ich habe eine Entität mit dem Namen DivePlan hinzugefügt, die momentan nur einen String-Eigenschaftsnamen enthält.Aspnetboilerplate - AngularJS erreicht den AppService nicht?
namespace PlanMyDive.DivePlan
{
public class DivePlan : Entity
{
public virtual string Name { get; set; }
public DivePlan() { }
public DivePlan(string name)
{
this.Name = name;
}
}
}
Dann habe ich einen Dienst in der Anwendungsschicht:
namespace PlanMyDive.DivePlan.Dto
{
[AutoMapTo(typeof(DivePlan))]
public class CreateDivePlanInput
{
[Required]
public string Name { get; set; }
}
}
namespace PlanMyDive.DivePlan
{
public class DivePlanAppService : IDivePlanAppService
{
private readonly IRepository<DivePlan> _divePlanRepository;
public DivePlanAppService(IRepository<DivePlan> personRepository)
{
_divePlanRepository = personRepository;
}
public void CreateDivePlan(CreateDivePlanInput input)
{
var diveplan = input.MapTo<DivePlan>();
_divePlanRepository.Insert(diveplan);
}
}
}
namespace PlanMyDive.DivePlan
{
public interface IDivePlanAppService : IApplicationService
{
void CreateDivePlan(CreateDivePlanInput input);
}
}
Schließlich habe ich eine Seite Pläne in den Angular Routen und umgesetzt wie folgt hinzugefügt:
(function() {
angular.module('app').controller('app.views.plans.plan', [
'$scope', '$modal', 'abp.services.app.divePlan',
function ($scope, $modal, divePlanService) {
var vm = this;
vm.divePlan = {
name: 'MyDivePlan'
};
vm.createNewDivePlan = function() {
abp.ui.setBusy();
divePlanService.createDivePlan(vm.divePlan);
abp.ui.clearBusy();
};
}
]);
})();
@using PlanMyDive.DivePlan
<div ng-controller="app.views.plans.plan as vm">
<h1>Welcome to your DivePlan</h1>
<div class="row">
<div class="col-md-12">
<form name="planCreateForm" role="form" novalidate class="form-validation">
<button type="button" class="btn btn-default" ng-click="vm.createNewDivePlan()">Create Plan</button>
</form>
</div>
</div>
<div class="row">
<table class="table">
<thead>
<tr>
<th>DivePlan Name</th>
<th>Autre</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="plan in vm.plans">
<td>{{plan.name}}</td>
<td>{{plan.name}}</td>
</tr>
</tbody>
</table>
</div>
</div>
Ich habe einen Haltepunkt in meinem JS-Code an der Linie divePlanService.createDivePlan (vm.divePlan); und einen Haltepunkt in meinem DivePlanAppService, wenn die Funktion public void CreateDivePlan (CreateDivePlanInput-Eingabe) aufgerufen wird. Das Problem, das ich erhalte, ist, dass der JS-Code ausgeführt wird, aber die DivePlanAppService-Funktion CreateDivePlan nie ausgeführt wird, oder bei Pause wird es nie an meinem Haltepunkt unterbrochen. Die Benutzeroberfläche zeigt Folgendes:
Ich habe versucht, den Code zu vereinfachen, so viel wie ich konnte. Deshalb macht die Service-Methode bisher nicht viel. Ich habe bemerkt, dass der Konstruktor von DivePlanAppService nie aufgerufen wird, während der Konstruktor von UserAppService aufgerufen wird, wenn ich zur/#/Benutzer-Seite navigiere.
Was habe ich vermisst? Stelle ich den CreateDivePlanInput nicht im richtigen Format bereit? Ich habe versucht zu kopieren, wie TenantAppService funktioniert. Danke im Voraus.
EDIT: Ich ging und Debug in der CastleDynamicInterceptor zu graben und fand diese Fehlermeldung in Bezug auf meine DivePlanAppService:
Einige Abhängigkeiten dieser Komponente nicht statisch aufgelöst werden können. 'PlanMyDive.DivePlan.DivePlanAppService' wartet auf folgende Abhängigkeiten: - Dienst 'Abp.Domain.Repositories.IRepository`1 [[PlanMyDive.DivePlan.DivePlan, PlanMyDive.Core, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]] 'welches nicht registriert wurde.