小编Bob*_*orn的帖子

RavenDB推送通知:未包含实际文件?

我已经使用RavenDB 成功实现了推送通知(参见下面的代码).我期待实际文档包含在更改通知中.这样,所有UI客户端都可以显示信息.但是,似乎只有Id和Etag属性可用于更改的文档.

如果我希望客户端能够显示有关文档的信息,我该怎么办?客户端现在是否需要进行数据库调用以根据ID获取文档?必须进行数据库调用以获取信息似乎效率低下.但是,应该发生什么?

documentStore.Changes()
    .ForDocumentsStartingWith("LogMessages")
    .Subscribe(change =>
    {
        if (change.Type == DocumentChangeTypes.Put)
        {
            // Fire event so consumers can display document info
            // Uh oh, are change.Id and change.Etag all we have here?
            DatabaseItemAdded(null, new EventArgs<string>(change.Id));
        }
});
Run Code Online (Sandbox Code Playgroud)

ravendb

3
推荐指数
1
解决办法
236
查看次数

多次调用(一次)到一次只能运行一个的方法

我有一个业务逻辑方法,必须先完成才能再次调用.多个客户端可以立即调用它:

public void DoSomething() {}
Run Code Online (Sandbox Code Playgroud)

我正在考虑通过将方法设为私有来解决它,并创建一个新的公共方法来将请求放在队列中:

public void QueueSomeWork()
{
    // put on a Queue object
    // How will DoSomething get invoked now?
}

private void DoSomething() {}
Run Code Online (Sandbox Code Playgroud)

我试图以优雅的方式解决这个问题.我的问题是如何DoSomething()知道运行.我想过创建一个计时器来检查队列,但是它会全天候运行,因为每年可能发生两次.

另一个想法是,DoSomething()当它完成了其他人会订阅的东西,从队列中选择一些工作并打电话时触发事件DoSomething().有没有更好的办法?

c# oop

3
推荐指数
1
解决办法
5059
查看次数

scriptcs - 无法读取包

我按照博客文章,只需两步即可运行脚本.基本上,我这样做了:

@powershell -NoProfile -ExecutionPolicy Unrestricted -Command "iex ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin
Run Code Online (Sandbox Code Playgroud)

这样做时我得到一个错误:

cinst scriptcs
Run Code Online (Sandbox Code Playgroud)

无法从路径'jQuery.2.0.1.1.nupkg'读取包.

这适用于不同的机器,但它在我目前的笔记本电脑上失败了.知道我做错了什么吗?

编辑

根据Damian的回答,下面,我只需删除位于此处的NuGet缓存的内容:

C:\ Users \用户名\ AppData \本地\的NuGet \缓存

jquery nuget scriptcs

3
推荐指数
1
解决办法
1396
查看次数

在onclick中传递变量:Uncaught SyntaxError:意外的标识符

我正在尝试将对象传递给onclick事件中的函数.如果我运行下面的代码,我会得到Uncaught SyntaxError: Unexpected indentifier.如果我取消注释该JSON.stringify行,并使用taskAsJson代替task,我会得到相同的错误.

$.each(tasks, function (index, task) {
    //var taskAsJson = JSON.stringify(task);
    items.push('<li><a href="#" onclick="showTask(' + task + ');">' + task.Description + '</a></li>');
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我硬编码一个值,比如5,它就可以工作,并且会传递给函数.

$.each(tasks, function (index, task) {
    items.push('<li><a href="#" onclick="showTask(' + 5 + ');">' + task.Description + '</a></li>');
});
Run Code Online (Sandbox Code Playgroud)

当我尝试传递对象时,为什么会出现错误?为了能够通过task或者我需要改变taskAsJson什么?

注意:items是一个用于更新div和listview的数组:

$('#appTasks').append(items).listview('refresh');
Run Code Online (Sandbox Code Playgroud)

javascript json

3
推荐指数
1
解决办法
2922
查看次数

在using块中使用'as IDisposable'

编辑:我的问题不是关于使用块及其工作原理.我的问题是关于两种方法的区别,如下所示.

我正在阅读CQRS旅程指南,我不明白这行代码:

using (repo as IDisposable)
Run Code Online (Sandbox Code Playgroud)

那是什么意思?为什么将它用作IDisposable?在典型的使用块中,不需要将其用作IDisposable:

using (var repo = this.respositoryFactory()) { // ... }
Run Code Online (Sandbox Code Playgroud)

知道为什么作者以第一种方式而不是第二种方式编写它?

这是代码出现的方法:

private Conference.Web.Public.Models.Conference GetConference(string conferenceCode)
{
    var repo = this.repositoryFactory();
    using (repo as IDisposable)
    {
        var conference = repo.Query<Conference>()
            .First(c => c.Code == conferenceCode);
        var conferenceModel =
        new Conference.Web.Public.Models.Conference
        {
            Code = conference.Code,
            Name = conference.Name,
            Description = conference.Description
        };
        return conferenceModel;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# idisposable using

3
推荐指数
1
解决办法
772
查看次数

什么.NET服务器端技术可以与AngularJS应用程序一起使用?

我正在尝试使用AngularJS创建我的第一个Web应用程序.我习惯使用ASP.NET MVC 4,所以我想我会在服务器端使用它,而在客户端使用Angular.但在观看视频和进行研究后,似乎将这两者混合起来是错误的.其中一个原因是路由:Angular以自己的方式路由,ASP.NET MVC也是如此.

那么,对于熟悉ASP.NET MVC的人来说,前端的Angular可以使用哪种服务器端Web技术?我正在Visual Studio 2013中创建一个新项目,这些是我的选择:

在此输入图像描述

注意:我不是在争论为什么一个选择比另一个更好; 我只是希望听到可用的可能性.我可以从那里调查.

注意2:我也可以使用Angular种子模板,但我可能会这样做,但这并不能解决服务器端使用的问题.

编辑 也许在这种情况下使用ASP.NET Web API是有意义的吗?请参阅/sf/answers/1476871861/.

c# asp.net asp.net-mvc angularjs

3
推荐指数
1
解决办法
3118
查看次数

是否可以使用泛型类型的构造函数注入?

我的事件处理程序当前具有如下类和方法签名:

public class MyEventHandler : IIntegrationEventHandler

public void Handle(IntegrationEventintegrationEvent) // IntegrationEvent is the base class
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的(以便处理程序可以接受具体类型):

public class MyEventHandler : IIntegrationEventHandler<MyEvent>

public void Handle(MyEvent integrationEvent)
Run Code Online (Sandbox Code Playgroud)

在 Startup.cs 中,我这样做了:

services.AddTransient<IIntegrationEventHandler<MyEvent>, MyEventHandler>();
Run Code Online (Sandbox Code Playgroud)

问题是注入这些处理程序的服务不能使用开放泛型,如下所示:

public MyService(IEnumerable<IIntegrationEventHandler<>> eventHandlers)
            : base(eventHandlers)
Run Code Online (Sandbox Code Playgroud)

指定基类也不起作用:

public MyService(IEnumerable<IIntegrationEventHandler<IntegrationEvent>> eventHandlers)
            : base(eventHandlers)
Run Code Online (Sandbox Code Playgroud)

这给了我 0 个处理程序。

当前方法的工作原理是我注入了所有 7 个处理程序。但这意味着处理程序必须在其方法中接受基类,然后进行强制转换。没什么大不了的,但如果我能让处理程序接受它所关心的具体类型,那就太好了。这可能吗?

c# generics dependency-injection autofac

3
推荐指数
1
解决办法
634
查看次数

代码覆盖率结果窗口中的额外类

在Visual Studio 2010中运行自动化测试后,"代码覆盖率结果"选项卡会显示我不理解的内容.其中一个被测试的类称为ApplicationData.它显示在代码覆盖列表中.但在这种情况下,它的变体也出现了三次(见下文).

如果我在代码覆盖率选项卡中展开每个ApplicationData实例,则第一个显示所有方法,其余显示一些方法.

我的问题是......附加了<> c__DisplayClass的额外ApplicationData类是什么?

在此输入图像描述

c# automated-tests visual-studio-2010

2
推荐指数
1
解决办法
338
查看次数

抽象类调用泛型方法 - 不会编译

我得到一个编译时错误,我的方法调用有一些无效的参数.

public abstract class EntityBase
{
    public virtual List<ValidationResult> Validate<T>()
    {
        // This line causes the error:
        var validationResults = this.ValidateEntity<T>(this, true).ToList();
    }

    protected IEnumerable<ValidationResult> ValidateEntity<T>(T entity, bool ignoreNullViolations)
    {
        // Code here
    }
}
Run Code Online (Sandbox Code Playgroud)

这门课是抽象的.那应该没问题.我尝试在方法签名中指定T的类型,但这没有帮助.为什么不编译?我不能传递this给期望T参数的方法?

编辑 - 可能的解决方案:

public virtual List<ValidationResult> Validate<T>() where T : class
{
    var validationResults = this.ValidateEntity<T>(this as T, true).ToList();
}
Run Code Online (Sandbox Code Playgroud)

编辑2

由于T应该只是一个子类,我认为类签名应该更改为泛型,以便强制子类设置它.然后路过this不会是这样的黑客.

c# generics

2
推荐指数
1
解决办法
407
查看次数

为什么在调用处理连接后连接数没有减少?

当我运行此代码时,与数据库的连接数在之后增加到3 connection.Open()。为什么它之后不降到2 connection.Close()

private static void AdoNetStuff()
{
    var connection = new SqlConnection(@"Initial Catalog=abook;server=.\SqlExpress;Integrated Security=true");
    var sqlCommand = new SqlCommand("SELECT TOP 10 * FROM dbo.Entity", connection);

    connection.Open();

    sqlCommand.ExecuteReader();

    sqlCommand.Dispose();
    connection.Dispose();
    connection.Close();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在控制台应用程序中,并且在关闭控制台应用程序之前,连接数不会降到2。

这就是我检查连接数的方式。

SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName
FROM sys.sysprocesses
WHERE dbid > 0 AND DB_NAME(dbid) = 'abook'
GROUP BY dbid, loginame
Run Code Online (Sandbox Code Playgroud)

我可以等一会儿再结束控制台应用程序,但我仍然有3个连接。一旦我结束该应用程序,连接数就会降到2。

c# sql-server

2
推荐指数
1
解决办法
675
查看次数