小编Pat*_*Pat的帖子

角度更改检测不适用于 HttpClinet.Subscribe 中的 ChangeDetectionStrategy.OnPush

我复制了一个简单的stackblitz,演示了我遇到的问题。问题是我有一个父组件将布尔值传递给子组件。这个布尔值是子组件上的@Input。需要注意的是,父组件使用ChangeDetectionStrategy.OnPush。子组件没有显式设置。

当父组件在订阅方法中更改子组件的布尔输入属性时,子组件最初不会检测到更改。总是需要单击 2 次才能让子组件检测到更改。

但是,当我在订阅方法之外更改子组件的布尔输入属性时,子组件会正确检测到更改,并且一切都会按预期工作(单击 1 次子组件即可识别更改)。

App.Component.ts(父组件)

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ],
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent  {
  constructor(private http: HttpClient) {

  }
  public isHelloVisible: boolean;
  public useHttpGet: boolean;

  showHello() {
    if (this.useHttpGet) {
    this.http.get('https://cors-anywhere.herokuapp.com/https://api.darksky.net/forecast/cc0e3799790b0b34bdeb6fef28c3daf7/17.447409200000003,-78.3724573?units=si').subscribe(data => {
      this.isHelloVisible = true;  
    });
    } else {
      this.isHelloVisible = true;
    }
  }

  closeHello() {
    this.isHelloVisible = false;    
  }
Run Code Online (Sandbox Code Playgroud)

子组件(Hello.component.ts)

@Component({
  selector: 'hello',
  template: `<div *ngIf="showHello">
    Hello
    <div (click)="closeHello()">Click me to close Hello</div>
  </div>
  
  `, …
Run Code Online (Sandbox Code Playgroud)

observable angular2-changedetection angular angular-input

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

如何使用MOQ库来模拟ENum

我在使用Moq库来模拟项目中的Enum时遇到了问题.我正在尝试测试一个类,其中一个方法接受一个ENum.有没有办法做到这一点?

这是我试图嘲笑的Enum:

public enum PermissionType
{
   Create = 0,
   Read = 1,
   Update = 2,
   Delete = 3,
}
Run Code Online (Sandbox Code Playgroud)

这是我试图用来创建模拟的代码:

 private static Mock<PermissionService> GetMockPermissionService(bool hasPermissions)
 {
    var mockPermissionService = new Mock<PermissionService>();

    mockPermissionService.Setup(x => x.HasPermission(It.IsAny<string>(), 
                      **It.IsAny<PermissionType>()**)).Returns(hasPermissions);

    return mockPermissionService;
 }
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

System.ArgumentException:不可覆盖的成员上的无效设置:x => x.HasPermission(It.IsAny(),It.IsAny())

我也尝试过:

mockPermissionService.Setup(x => x.HasPermission(It.IsAny<string>(), 
                          **It.IsAny<int>()**)).Returns(hasPermissions);

mockPermissionService.Setup(x => x.HasPermission(It.IsAny<string>(), 
                          **PermissionType.Read**)).Returns(hasPermissions);
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激...

c# enums moq mocking

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

使用COM + .Net Interop 64位Windows Server 2008 IIS 7 Server.CreateObject失败的经典ASP

我遇到了与运行IIS7的64位Windows Server 2008服务器上的经典asp应用程序执行.Net dll相关的问题.情况如下:

我编写了一个.Net C#程序集来执行一些加密任务.通过从ServicedComponent继承,可以将此程序集用于传统ASP环境,确保assemblyinfo文件具有ComVisible(true)属性,并且已使用"regsvcs"命令行进行安装.

在我自己的桌面上测试(运行IIS6的XP)一切正常.迁移到IIS 7,Windows Server 2008时,我得到了臭名昭着的"ASP 0177 Server.CreateObject failed".

我试过以下无济于事:

  1. 确保在服务器上安装了ASP和脚本扩展功能,因为这不是IIS7的默认设置.这允许我执行简单的ASP命令,但不执行.net程序集的server.createobject.
  2. 为支持经典asp站点的应用程序池启用32位应用程序支持
  3. 使用NetworkService作为支持经典asp站点的应用程序池的标识
  4. 尝试使用regsvr32注册dll,失败了
  5. 我能够创建其他对象,如"scripting.filesystemobject"
  6. 将dll移动到wow64目录,然后使用regsvcs注册它们.
  7. 是的,当我执行regsvcs命令时,它们来自使用"RunAs"管理员启动的命令行.regsvcs命令已成功从64位和32位版本注册.但是,当从经典的asp应用程序中使用时,它会失败.

这个问题是密切相关的这一个.但是,我认为这个问题与使用服务器上的工具更相关,而不是与我类似的程序问题.

任何人都有更多想法尝试?

64-bit iis-7 asp-classic

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

DDD/NHibernate使用聚合根和对网页设计的影响 - 例如 编辑聚合根的子节点

希望这个虚构的例子能说明我的问题:

假设您正在编写一个跟踪软件产品投诉的系统,以及该产品的许多其他属性.在这种情况下,SoftwareProduct是我们的聚合根,而投诉是只能作为产品子项存在的实体.换句话说,如果软件产品从系统中删除,那么投诉也是如此.

在系统中,有一个类似于网页的仪表板,它显示单个SoftwareProduct的许多不同方面.仪表板中的一个部分以时尚网格显示投诉列表,仅显示每个投诉的一些非常高级别的信息.当管理员类型用户选择其中一个投诉时,会将其定向到编辑屏幕,以便他们编辑单个投诉的详细信息.

问题是:编辑屏幕检索单个投诉的最佳方式是什么,以便可以显示它以进行编辑?请记住,我们已将SoftwareProduct建立为聚合根,因此不应允许直接访问Complaint.此外,系统正在使用NHibernate,因此急切加载是一个选项,但我的理解是,即使通过SoftwareProduct急切加载单个投诉,只要访问Complaints集合,就会加载其余的集合.那么,如何通过SoftwareProduct获得单一投诉,而不会产生加载整个投诉集合的开销?

nhibernate domain-driven-design aggregateroot

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