小编Jas*_*son的帖子

UI层是否应该能够将lambda表达式传递到服务层而不是调用特定方法?

我正在研究的ASP.NET项目有3层; UI,BLL和DAL.我想知道UI是否可以接受将lambda表达式传递给BLL,或者UI是否应该传递参数,而Service方法应该使用这些参数来构造lambda表达式?这是一个显示两个senarios的示例类.

public class JobService 
{
    IRepository<Job> _repository;

    public JobService(IRepository<Job> repository) 
    {
        _repository = repository;
    }

    public Job GetJob(int jobID)
    {
        return _repository.Get(x => x.JobID == jobID).FirstOrDefault();
    }

    public IEnumerable<Job> Get(Expression<Func<Job, bool>> predicate)
    {
        return _repository.Get(predicate);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于上面的类,UI可以调用以下内容:

JobService jobService = new JobService(new Repository<Job>());
Job job = jobService.Get(x => x.JobID == 1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

还是应该只允许调用GetJob(int jobID)?

这是一个简单的例子,我的问题一般是,如果UI层能够将lambda表达式传递到服务层而不是调用特定的方法吗?

.net c# linq architecture asp.net

10
推荐指数
1
解决办法
1152
查看次数

使用WebApi和Controller路由的Url.Action

我有一个2个控制器,其中一个是WebApi:

public class ListController : ApiController
{        
    public object Remove(string ListId, List<string> ItemIds)
    {
        //removed
    }
}

public class ListController : Controller
{        
    public object Remove(string ListId, List<string> ItemIds)
    {
        //removed
    }
}
Run Code Online (Sandbox Code Playgroud)

我的路线在Global.asax中注册如下:

WebApiConfig.Register(GlobalConfiguration.Configuration);
RouteConfig.RegisterRoutes(RouteTable.Routes);
Run Code Online (Sandbox Code Playgroud)

我的WebApi路由定义为:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

通过@ Url.Action("删除","列表")生成网址时,我得到的路径是'/ list/remove'.我期望选择WebApi路由('/ api/list/remove'),因为WebApi路由在其他路由之前注册.

如何让@ Url.Action按预期返回WebApi路由?

asp.net-mvc asp.net-mvc-routing asp.net-mvc-4 asp.net-web-api

5
推荐指数
1
解决办法
3087
查看次数

如何在Jasmine测试中模拟Angular $ q服务?

我正在尝试测试一个Angular服务,它有2个依赖项,一个在$ q上,另一个在'myService'上,它也依赖于$ q.

(function() {
    'use strict';

    angular.module('myModule').factory('myService', [
        '$q',
        'apiService',
        function($q, apiService) {

            var data = null;

            function getData() {
                var deferred = $q.defer();

                if (data === null) {

                    apiService.get('url').then(function(result) {
                        data = result;
                        deferred.resolve(data);
                    }, function() {
                        deferred.reject();
                    });
                } else {
                    deferred.resolve(data);
                }

                return deferred.promise;
            }

            return {
                getData: getData
            };
        }
    ]);
})();
Run Code Online (Sandbox Code Playgroud)

我开始编写一个Jasmine测试,如下所示,但是有问题嘲笑$ q.我想将$ q的真实版本而不是模拟版本注入'myService'和'apiService',但我不知道如何实现这一目标.

'use strict';

describe('My service', function() {
    var qSpy, apiServiceSpy;

    beforeEach(module('myModule'));

    beforeEach(function() {
        qSpy = jasmine.createSpyObj('qSpy', ['defer']);

        apiServiceSpy = jasmine.createSpyObj('apiServiceSpy', ['get']); …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing jasmine angularjs angular-promise

4
推荐指数
1
解决办法
8105
查看次数