我正在看SignalR正在进行的项目,它似乎完全是我想要的.然而,我仍然有点困惑的一点是团体和加入.
我将首先尝试描述实现的上下文.因此,现有系统中的用户将希望召开关于给定主题的会议,然后创建具有给定名称/标识符的房间,然后他们将邀请其他人进入该房间,然后它将基本上像私人聊天室.
所以我假设的步骤是作为主机,创建一个房间并加入它,然后发出邀请,这将要求用户点击哪个会以某种方式告诉服务器加入哪个房间.
现在我从文档中看到有一个Join和Disconnect方法可以挂钩将某人放入一个组,但是看起来Join除了查询字符串之外没有与之关联的上下文,所以我有点困惑至于什么触发了Join,正如我所期望的那样,它将是客户端上的一个手动触发的方法,通过一些对象提供关于放入它们的空间的上下文,因为你可以拥有数百个私人房间.
那么如何为Join方法提供一些上下文和断开连接,让他们知道您要求加入的空间,就好像它不是手动触发的,如何设置查询字符串,如果是手动触发,为什么可以你不发送自定义对象.即
public Task Join()
{
var groupName = Context.QueryString["some-room-identifier"];
return Groups.Add(Context.ConnectionId, groupName);
}
Run Code Online (Sandbox Code Playgroud)
VS
public Task Join(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
Run Code Online (Sandbox Code Playgroud)
所以我错过了一些东西,或者是否有某种方法可以为加入的用户提供上下文,以便将它们放在正确的位置?
我认为这很简单但后来意识到我无法在任何地方找到任何信息.
我有这样的自定义任务:
public class MyCustomTask : Task
{
[Required]
public string[] SomeStrings {get;set;}
public override bool Execute()
{
// Do something with strings...
}
}
Run Code Online (Sandbox Code Playgroud)
匹配的MSBuild东西基本上是这样的:
<UsingTask TaskName="MyCustomTask" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildBinPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<SomeStrings ParameterType="System.String[]" Required="true" />
</ParameterGroup>
<Task>
...
</Task>
</UsingTask>
<Target Name="DoSomething">
<MyCustomTask SomeStrings="????" />
</Target>
Run Code Online (Sandbox Code Playgroud)
不知道在SomeStrings参数中放什么,想想也许它会理解我是否做了"xxx,xxx,xxx"所以任何人都可以对此有所了解.基本场景很像标记,所以我需要一个字符串列表然后一些比较字符串,所以我需要传入2个列表/数组,但只是难倒.
我以前从未使用过Windsor但是已经使用过其他DI框架,而且我现在有一个相当奇怪的问题.
我有一个工厂类,它的构造函数中包含一个字符串,但每当我尝试解析该对象时,我得到一个异常说:
Handler for System.String was not found.
<Message>Handler for System.String was not found.</Message>
<StackTrace>at Castle.MicroKernel.Resolvers.DefaultDependencyResolver
.TryGetHandlerFromKernel(DependencyModel dependency, CreationContext context)
in d:\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:line 403
at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveCore(CreationContext context, ComponentModel model, DependencyModel dependency) in d:\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:line 270</StackTrace>
<Type>Castle.MicroKernel.Handlers.HandlerException</Type>
</InnerException>
<Message>Missing dependency.
Component SomeExampleFactory has a dependency on System.String, which could not be
resolved.
Make sure the dependency is correctly registered in the container as a service, or
provided as inline argument.</Message>
Run Code Online (Sandbox Code Playgroud)
该类看起来像:
public interface IDummyFactory
{
void DoSomething();
}
public class DummyFactory : IDummyFactory …Run Code Online (Sandbox Code Playgroud) 我有一个使用jquery mobile的应用程序,它包含几个html页面,每个页面都有一些jquery页面元素.在桌面浏览器上它一切正常但是当我在我的Android设备上加载它(运行2.3)时,第一页看起来很好,但每当你点击一个链接时(比如说来自index.html - > logged-in-menu.html jquery移动设备似乎没有启动,也没有应用任何样式.如果我从当前页面返回到index.html,那么index.html将保持原样.
那么在不同的html页面之间移动是否有正确的方法?我没有得到任何浏览器错误,所以一切似乎都工作正常,但没有应用jqm的样式或功能.
只是所有人都在同一页面上,链接使用data-ajax ="false",因此它们会导致完整的页面刷新(因为这是必需的),应用程序无法作为单个页面应用程序工作,因此将所有内容放入一个大的html中文件不是一个选项.
所以我们假设我有一个50个文件模块,每个模块包含:
export class <SomeClassName> { /* content */ }
然后,我创建一个根文件,通过重新导出所有文件来简化使用.所以它看起来像:
export * from "./src/some-class-1";
export * from "./src/some-class-2";
export * from "./src/some-class-3";
// etc
Run Code Online (Sandbox Code Playgroud)
然后,我通过TSC运行它来执行一个"常用"模块,目标是"es5",带有描述符输出.
到现在为止还挺好.我有我package.json的名字my-module目标输出index.js作为我的模块的入口点.所以我现在决定在另一个打字稿项目中使用这个模块.
所以我为它做了npm安装(让我们假装)npm install my-module并且它全部拉入,所以我现在有生成的d.ts文件,我有实际的commonjs模块,所以我可以使用它.一切似乎都很好.
然后是问题所在.然后我决定使用该模块:
import {SomeClass1} from 'my-module'
它在TS世界中爆炸,它不知道与什么my-module有关,好像我们回去看看输出的index.js,它不包含环境模块.
所以这就是问题,通用模块通常在包含模块名称时使用package.json作为参考点,但是TS使用d.ts文件.所以我认为好吧,我需要将我的重新导出包装index.ts在一个模块中,所以我尝试:
export module "my-module" { /* all other re-exports */ }
但事实证明,您只能为环境模块使用字符串模块名称,并且您只能将它们放在d.ts文件中,但是我的d.ts文件是从现有代码库生成的.
所以这是我的困境,我可以手动进入并declare module "my-module为我的d.ts 添加一个包装器,但它不是非常自动化,或者我喜欢使用ES6语法的博客文章做并相对引用文件最终会有很多import {blah} from "../node_modules/my-module/dist/index"希望我们都同意的是有点傻.
所以我找不到任何其他可以在自动化世界中工作的方法,因为当你使用ES6语法时,关于这个主题的所有博客文章和文档都使用相对文件导入,而不是从整个事物编译和共享时的导入通过d.ts文件.
那么有没有办法将我的再出口包装在文本模块名称中?或者至少告诉index.d.ts包含环境模块?(记住它会为项目中的每个文件输出一个d.ts文件,但我们只关心通过index.d.ts导入模块,因为它会重新导出所有内容).
在查看问题后,似乎TS 应该支持ES3和装饰器,我有一个场景,我在typescript中有一个使用装饰器和目标ES5的现有代码库,但我现在需要显然支持需要ES3的IE6.
现在根据:https: //github.com/Microsoft/TypeScript/issues/4681
似乎应该支持ES3,但是如果我输出到目标ES3,我得到:
error TS1241: Unable to resolve signature of method decorator when called as an expression.
Supplied parameters do not match any signature of call target.
我得到0个错误,一切都在ES5中运行,所以你需要做任何事情才能让它在ES3中运行,或者它是否只是不受支持?
以下是该问题的云9示例:
https://ide.c9.io/grofit/knockout-decorators-es3-example
只需gulp在命令行上运行,如果将tsconfig目标更改为es5,它将起作用.
我确信这是一个愚蠢的问题,因为我假设答案是"当对象由Ninject实例化时"......但我想仔细检查......
为了给出更多关于我为什么问这个问题的背景,我有一个实现NinjectHttpApplication的asp mvc应用程序.但是在OnApplicationStarted覆盖中,我需要在Ninject中绑定的单例实例上激活方法.
问题是内核是暴露的,但不应该用作服务定位器,所以我可以从中获取对象并调用DoSomeSetup(); 方法,但这似乎是一个失败.据我所知,NinjectHttpApplication实例不是DI,因为Global.asax文件直接使用它,所以我不能将它直接用于应用程序.
这给我留下了另外一个选项,即添加OnActivation(x => x.DoSomeSetup()); 调用绑定,但是这个对象只在某些地方使用,所以它不像第一次加载页面时控制器需要它,所以如果OnActivation等待创建第一个实例,它可能不会发生一会儿.
希望那不要太混乱:)
我有一个奇怪的问题,每当我尝试远程调用我们的测试服务器时,TeamCity就会挂起.
目前构建步骤是:
- 模板文件
- 编译代码
- 包项目
- 将包发送到测试服务器
- 在测试服务器上解压缩包
现在一切正常,直到最后一个阶段,解压缩远程服务器上的包.现在我想运行一个powershell命令来连接并运行命令然后退出.如果我从远程桌面使用PowerShell,并且提供的用户凭据是正确的,这一切都正常.
正在运行的示例如下:
$password = ConvertTo-SecureString "%PasswordVar%" -AsPlainText -Force
$credentials = New-Object System.Manager.Automation.PsCredential("%UsernameVar%", $password)
etsn -computername %TestServer1Var% -Credential $credentials
Run Code Online (Sandbox Code Playgroud)
当这称为TeamCity只是挂起时,它必须手动停止或它将永远保持在代理上的这一步骤.我试过不使用凭据,我试过不使用etsn并使用完整的命令名称,也尝试了其他远程命令方法,似乎没有任何工作.
那么有没有办法让TeamCity实际运行命令?或者找出导致它无限期地处理这一步骤的原因?
我只是在做一些 API 测试,并且试图验证发送下来的 cookie 数据是否正确,但是我找不到任何有关从响应对象获取 cookie 的文档,只能从请求中获取 cookie。
那么有没有一种快速的方法可以像处理请求一样执行此操作req.cookies["myCookie"],我知道我可以获取标头并从那里获取 set-cookie,但尝试从那里手动解析 cookie 数据有点混乱。
因此,NPM 3已经删除了自动解析对等依赖关系,这很好,但是如果我在其他地方使用应用程序来开发插件/库,如果我在peerDependencies这里使用底层库这是正确的概念,则意味着如果有人想要要在该库上工作,他们需要手动解决所有依赖项.
因此,我没有让他们这样做,而是将相同的依赖项放入devDependencies以满足本地开发场景,这似乎是合乎逻辑的,因此任何使用它的人都需要明确地满足对等体,任何开发库的人都将获得免费的对等依赖性.这个devDependencies.
所以问题是,这有什么不对吗?因为我能找到关于如何以peerDependencies任何自动方式合理处理NPM3的信息.
===更新===
正如评论中所提到的,当我尝试这样做时,它与早期版本的npm不兼容,因此npm> = 3.0可以正常使用这种方法并且它自动满足标准,开发人员可以检查npm install并提高工作效率,如果你是在早期版本的NPM上做到这一点,它就会在未满足的同级依赖项中爆炸,似乎无法正常工作.
我发布这个,因为我希望这与早期版本的不兼容在某种程度上归结为我的无能,所以我既可以支持那些只想npm install在这个软件包上开发它的人的开发,也可以支持以前的版本.因此,如果您知道更好的方法或解决此问题或其他问题,请介绍一下.
.net ×2
javascript ×2
node.js ×2
typescript ×2
asp.net ×1
c# ×1
cookies ×1
cordova ×1
express ×1
jquery ×1
msbuild ×1
msbuild-task ×1
ninject ×1
npm ×1
powershell ×1
signalr ×1
supertest ×1
teamcity ×1
tsc ×1