小编Rog*_*ill的帖子

使用Typescript和RequireJS导入jqueryui

我一直无法正常使用jQueryUI.在我尝试添加jQueryUI之前,单独使用jQuery就可以了.

使用下面的代码,我目前在chrome中得到"TypeError:jQuery不是函数(...)",这很奇怪,考虑到jquery在require.config文件中被标记为依赖项.

从.ts到.js的编译没有错误.

initApp.ts:

/// <reference path="../../../typings/jqueryui/jqueryui.d.ts"/>
import * as jQuery from "jquery"; //Works completely fine
import * as jQueryUI from "jquery-ui"; //Can't even find the module unless
                                       //d.ts file is modified
Run Code Online (Sandbox Code Playgroud)

编译为js:

define(["require", "exports", "jquery-ui"], function (require, exports, jQuery) {...}
Run Code Online (Sandbox Code Playgroud)

jqueryui.d.ts:

/// <reference path="../jquery/jquery.d.ts"/>
declare module JQueryUI { <unmodified code>}

//Added this declare

declare module "jquery-ui" {
  export = jQuery;
}
Run Code Online (Sandbox Code Playgroud)

Require.config.js:

require.config({
    baseUrl: "./components/",
    paths: {
        "jquery": "./javascripts/lib/jquery-2.1.4",
        "jquery-ui": "./javascripts/lib/jquery-ui",
        "go": "./javascripts/lib/go-debug"
    },
    shim: {
        "jquery": {
          exports: …
Run Code Online (Sandbox Code Playgroud)

jquery jquery-ui requirejs typescript

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

SQL Geometry查找半径中的所有点

我精通SQL,但对使用SQL Geometry功能很新.我有一个非常基本的问题需要解决,但我没有在网上找到任何解释如何使用几何对象的好资源.(Technet是学习新事物的糟糕方式......)

我在笛卡尔平面上有一个2d点的集合,我试图找到半径集合内的所有点.

我使用如下语法创建并填充了一个表:

更新[Things] set [Location] = geometry :: Point(@ X,@ Y,0)

(@ X,@ Y只是x和y值,0是所有对象共享的任意数字,如果我理解正确,允许设置过滤)

这是我离开轨道的地方......我是否尝试使用它构建某种多边形集合和查询,或者是否有一些简单的方法来检查多个半径的交集而不构建一堆圆形多边形?

附录:如果没有人对多半径问题有答案,那么单半径解决方案是什么?

UPDATE

以下是我使用假想的星型数据库编写的一些示例,其中星星作为点存储在xy网格上:

选择框中的所有点:

DECLARE @polygon geometry = geometry::STGeomFromText('POLYGON((' 
+ CAST(@MinX AS VARCHAR(10)) + ' '  + CAST(@MinY AS VARCHAR(10)) + ',' 
+ CAST(@MaxX AS VARCHAR(10)) + ' '  + CAST(@MinY AS VARCHAR(10)) + ', ' 
+ CAST(@MaxX AS VARCHAR(10)) + ' '  + CAST(@MaxY AS VARCHAR(10)) + ',' 
+ CAST(@MinX AS VARCHAR(10)) + ' '  + CAST(@MaxY AS VARCHAR(10)) + ',' 
+ …
Run Code Online (Sandbox Code Playgroud)

sql spatial spatial-query

7
推荐指数
1
解决办法
1万
查看次数

跨程序集和命名空间的依赖注入

我正在研究DI问题,我认为我理解其原因,但我需要一些建议来解决.

我已经构建了一个独立的程序集,它与Sql(称为程序集a)和另一个包含业务逻辑的程序集(称为程序集b)进行对话.我在b程序集中为db类创建了一个接口.由于接口不是db程序集的一部分,因此我不需要对db项目的任何引用,如果我想在运行时运行单元测试而不是程序集,我可以加载对db程序集或存根的引用需要知道另一个.

我可以在编译看起来像这样的业务逻辑库中编写代码:(假装a和b是各自程序集中的名称空间)

 a.IDatabaseClass db_class = (a.IDatabase)new b.Database();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行它时,我得到一个无效的强制转换异常.我认为它编译是因为接口完全匹配类,但在运行时失败,因为对象签名在Database类的继承链中看不到IDatabase.

在c ++中你可以随心所欲地抛出任何东西,但是c#对于构建对象指针有点严格.即使该类具有所有正确的函数签名,它也会因为对象不匹配而爆炸.

现在我可以将db对象接口放在具有db对象的程序集中,但是业务逻辑需要对db程序集的引用.此外,这只会产生复杂性,因为如果我在单元测试中编写存根db对象,我需要对我将在测试存根对象中使用的接口的db程序集的引用.这似乎并没有通过这样做解开耦合......

我可以将所有接口放在第三个程序集中,该程序集是db程序集,业务逻辑和单元测试的父级.这就是解决循环依赖问题的方法.但是,这会将db程序集绑定到父程序集,并使其与其他项目一起使用的模块化程度要低得多.

我愿意接受有关如何设置每个组件以便它们独立运行并可用于DI的建议.我想我可以将测试存根对象保存在与真实代码相同的程序集中,但这看起来很奇怪.

解决方案:下面的回复中的一个回答说我正在拍摄的内容基本上是接口的鸭子打字.C#当前不支持duck typing,但我认为它可能是可能的,因为接口实现的行为类似于你可能称之为部分类指针的方式(或者更准确地说,是函数指针的集合).我的实验向我展示了其他情况,这就是原因.

所以,直到Redmond将"更多的野鸭"放入c#,看起来我们无法完全达到最终优雅的解耦组件.

c# unit-testing dependency-injection

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

如何在 C# 中使用 TaskScheduler 设置“仅在登录时运行”和“运行方式”?

我正在尝试使用 c# 任务计划程序托管包装器以编程方式在 Windows 系统上生成计划任务。我可以生成任务,但只能在帐户登录时才能运行它:

在此输入图像描述

我一直在环顾四周,发现了去年提出的另一个问题,但要么还有其他未提及的相关设置,要么代码库中的某些内容从那时起发生了变化:

如何在 C# 中使用 TaskScheduler 设置“仅在登录时运行”和“运行方式”?

我认为这种方法可能是正确的,但是当我尝试它时,我收到一条令人困惑的错误消息:

任务计划程序 2.0 (1.2) 不支持设置此属性。您必须使用 InteractiveToken 才能在当前用户会话中运行任务。

我使用的代码如下:

    public static void ScheduleTask(string machineName, string taskName, string taskAccount, string password)
    {
        using (TaskService ts = new TaskService(machineName))
        {
            TaskDefinition td = ts.NewTask();

            td.Principal.RunLevel = TaskRunLevel.Highest;
            td.Principal.UserId = WindowsIdentity.GetCurrent().Name;
            td.Principal.LogonType = TaskLogonType.InteractiveToken;

            td.Settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew;
            td.Settings.DisallowStartIfOnBatteries = false;
            td.Settings.StopIfGoingOnBatteries = false;
            td.Settings.StartWhenAvailable = true;
            //td.Settings.RunOnlyIfLoggedOn = true;
            td.Settings.Enabled = true;
            td.Settings.Hidden = false;
            td.Settings.AllowHardTerminate = true;
            td.Settings.ExecutionTimeLimit = new TimeSpan();

            var …
Run Code Online (Sandbox Code Playgroud)

.net c# windows taskscheduler

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