ASP .NET Boilerplate - 注册程序集

时间:2016-06-04 16:40:22

标签: c# asp.net angularjs asp.net-mvc asp.net-boilerplate

我正在使用AngularJS和Entity Framework在ASP .NET Boilerplate Framework上进行应用程序。

很长一段时间我都在学习本教程(http://www.codeproject.com/Articles/791740/Using-AngularJs-ASP-NET-MVC-Web-API-and-EntityFram#ArticleBuildWebApiServices

当注册控制器时,通过WebApiModule它没有显示启动的迹象(我在控制器构造函数上设置断点并且它没有响应)。我的目标是使用角度控制器获得所有产品。

这是我的WebApiModule代码:

{
    [DependsOn(typeof(AbpWebApiModule))]
    public class ShopWebApiModule : AbpModule
    {
        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

            DynamicApiControllerBuilder
                .ForAll<IApplicationService>(Assembly.GetAssembly(typeof(ShopApplicationModule)), "shopsystem")
                .Build();
        }
    }
}

这是我的IProductAppServiceCode:

{
    public interface IProductAppService:IApplicationService
    {
        GetProductsOutput GetProducts(GetProductsInput input);
        //void UpdateProduct(UpdateProductInput input);
        //void CreateProduct(CreateProductInput input);
    }
}

这是我的ProductAppServiceCode:

{
    public class ProductAppService : ApplicationService, IProductAppService
    {
        private readonly IProductRepository _productRepository;

        public ProductAppService(IProductRepository productRepository)
        {
            _productRepository = productRepository;
        }

        public GetProductsOutput GetProducts(GetProductsInput input)
        {
            var products = _productRepository.GetKind(input.BookKind);
            return new GetProductsOutput
            {
                Products = Mapper.Map<List<ProductDto>>(products)
            };
        }


    }
}

这是我的Angular Controller代码:

(function () {
    var app = angular.module('app');

    var controllerId = 'shop.views.product.list';
    app.controller(controllerId, [
        '$scope', 'abp.services.shopsystem.product',
        function ($scope, productService) {
            var vm = this;


            vm.products = [];

            $scope.productType = 0;
            vm.refreshProducts();
            $scope.$watch('selectedProductType', function (value) {
                vm.refreshTasks();
            });

            vm.refreshProducts = function () {
                abp.ui.setBusy( //Set whole page busy until getTasks complete
                    null,
                    productService.getProducts({ //Call application service method directly from javascript
                    }).success(function (data) {
                        vm.tasks = data.tasks;
                    })
                );
            };

        }
    ]);
})();

我只是这个框架中的乞丐,如果你能帮助我,我会很高兴。

如果我应该为您提供更多信息,请说出来。

1 个答案:

答案 0 :(得分:0)

我想念你的一些信息,所以我试着从我看到的东西开始猜测。

  1. 从ShopApplicationModule
  2. 添加依赖项
  3. 将web api公开为“app”,而不是“shopystem”(除非你修改了apb中的javascript):
  4. [DependsOn(typeof(AbpWebApiModule), typeof(ShopApplicationModule))]
    public class ShopWebApiModule : AbpModule {
        public override void Initialize()
        {
           IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
           Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
                .ForAll(Assembly.GetAssembly(typeof(ShopApplicationModule)), "app")
                .Build();
            }
        }
    
    1. javascript:“成功(...)”已从AngularJS 1.4+中弃用。然后使用(....)
    2. javascript:远程方法的错误管理
    3. ...
      app.controller(controllerId, [
              '$scope', 'abp.services.app.product',
      ...
      
      var input = {};   // not sure here about your input DTO!
      abp.ui.setBusy(
          null,       //set whole page busy
          productService.getProducts(input)
          .then(
              function successCallback(response) {
                  vm.tasks = response.data;
              },
              function errorCallback(response) {
                 // do what you like
              }
          )
          .finally(function () {
               // do what you like
          })
      );