小编Kal*_*son的帖子

JavaScript DI/IoC与静态类型语言的标准DI模式等效

.NET和Java都有大量可用的DI/IoC容器,每个容器都有许多模式,我发现这些模式在处理它们的各个方面非常有用.我现在正想在JavaScript中做同等的事情.由于JavaScript是一种动态语言,我不希望DI/IoC容器直接等同于静态类型语言中的容器提供的所有功能,因此欢迎使用这些模式的替代方案.我还希望JavaScript中提供的DI/IoC容器的功能会有所不同,因此对不同容器的引用非常受欢迎.

以下模式是Autofac 3支持的模式,我认为这些模式适用于动态语言.有关这些模式和关系的一般信息,请参阅 http://autofac.readthedocs.org/en/latest/resolve/relationships.htmlhttp://nblumhardt.com/2010/01/the-relationship-zoo/.以下概念中的大多数(如果不是全部)也可以使用其他语言和DI/IoC容器,例如Google GuiceSpring.

与JavaScript中下面描述的概念和模式最接近的等价物是什么?

一般概念

概念1:向IoC容器注册

在IoC容器可以创建类型的实例之前,它需要知道类型.这是通过注册完成的.注册通常以声明方式完成:

class A {}
var builder = new ContainerBuilder();
builder.RegisterType<A>();
Run Code Online (Sandbox Code Playgroud)

上面使IoC容器知道类型A.它通过反射发现A的依赖性.注册也可以通过充当工厂的功能进行.这些函数通常是lambdas,可以内联编写:

class B {}
class A {
    A(string name, B b) { }
}
builder.RegisterType<B>();
builder.Register(c => // c is a reference to the created container
    new A("-name-", c.Resolve<B>()));
Run Code Online (Sandbox Code Playgroud)

当您的类型需要使用不是服务的依赖项(例如上面示例中的名称)进行参数化时,能够提供工厂函数特别有用.

由于C#支持接口和抽象类,因此它通常不是重要的具体数据类型,而是它实现的抽象类型.在这些情况下,您将该类型注册为应该可用的接口或抽象类:

interface IPlugin {}
class P : IPlugin
builder.RegisterType<P>().As<IPlugin>();
Run Code Online (Sandbox Code Playgroud)

通过上面的注册,任何请求a的尝试P都会失败,但是对a的请求IPlugin会成功.

概念2:容器创建和组合根

完成所有注册后,需要创建容器:

public class Program {
    public …
Run Code Online (Sandbox Code Playgroud)

javascript c# dependency-injection inversion-of-control autofac

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

什么是维护与添加新功能?

在维护和新功能之间应该在哪里划线?

牛津英语词典将维护定义为:

(7.a)保持工作秩序,维修等的行为; 通过提供设备等手段来保持建筑物,机构,部队等; 如此保持的状态或事实; 保养的意思或规定.

我正在使用客户端 - 服务器应用程序并维护客户端.根据定义,我希望执行:

  • 漏洞修复
  • API Adaptations(客户端继续使用服务器所需的微小更改)
  • 确定已发现的性能问题

我不希望表演:

  • 新开发(添加新功能)

维基百科软件维护页面引用了纠正,自适应,完善和预防性维护,这似乎与我期望的一致,但客户端 - 服务器性质使问题复杂化.

编辑:对于没有依赖关系的独立应用程序,如果软件正常工作,它应该继续工作.使用客户端 - 服务器应用程序,客户端可能会在服务器更改时中断.虽然这不会改变维护的定义,但这意味着有必要对客户端应用程序进行更改时有更多的机会和场合.

如果双方要就维护合同达成一致意见,则必须相互理解什么是合格和维护以及哪些合格作为新功能,因此问题就在于此.

maintenance client-server

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

如何告诉M2Eclipse将jar文件安装为maven依赖项

我想添加jpoller.jar为maven依赖项,因此我编辑了我的pom.xml文件以包含它:

<dependency>
    <groupId>org.sadun</groupId>
    <artifactId>jpoller</artifactId>
    <version>1.5.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

现在,正如预期的那样,当我从命令行编译时,我得到一个错误,因为jpoller它不在我列在我的pom中的任何存储库中,也不能找到它.虽然我可以为它创建一个存储库,但我不想在这一点上.因此,我收到以下错误:

[INFO]无法解决工件.

缺少:---------- 1)org.sadun:jpoller:jar:1.5.2

尝试从项目网站手动下载文件.

然后,使用以下命令安装它:mvn install:install-file -DgroupId = org.sadun -DartifactId = jpoller -Dversion = 1.5.2 -Dpackaging = jar -Dfile =/path/to/file

如何在没有maven CLI的机器上的M2Eclipse插件中执行此操作?

dependencies maven-2 m2eclipse pom.xml

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

系统调用将内存映射到文件描述符(逆mmap)?

我希望能够将内存映射到文件描述符,以便我可以使用一些需要文件描述符的现有函数.这基本上就是我在寻找的东西:

void do_operation1(int fd);

char data[DATA_MAX] = { /* embedded binary data */ };
int fd = addr_to_fd(data, DATA_MAX);

do_operation1(fd);
/* ... operate on fd ... */
Run Code Online (Sandbox Code Playgroud)

我可以使用什么系统调用或调用来实现此目的?

c unix posix mmap system-calls

6
推荐指数
2
解决办法
2645
查看次数

hibernate中的Javassist失败:无效的常量类型:60

我正在创建一个cli工具来管理现有的应用程序.应用程序和测试都构建良好并运行良好,但尽管我在运行jar中存在的cli工具时收到了javassist失败:

INFO: Bytecode provider name : javassist
...
INFO: Hibernate EntityManager 3.5.1-Final
Exception in thread "main" javax.persistence.PersistenceException: Unable to configure EntityManagerFactory
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:371)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
        ...
        at com.sophware.flexipol.admin.AdminTool.<init>(AdminTool.java:40)
        at com.sophware.flexipol.admin.AdminTool.main(AdminTool.java:69)
Caused by: java.lang.RuntimeException: Error while reading file:flexipol-jar-with-dependencies.jar
        at org.hibernate.ejb.packaging.NativeScanner.getClassesInJar(NativeScanner.java:131)
        at org.hibernate.ejb.Ejb3Configuration.addScannedEntries(Ejb3Configuration.java:467)
        at org.hibernate.ejb.Ejb3Configuration.addMetadataFromScan(Ejb3Configuration.java:457)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:347)
        ... 11 more
Caused by: java.io.IOException: invalid constant type: 60
        at javassist.bytecode.ConstPool.readOne(ConstPool.java:1027)
        at javassist.bytecode.ConstPool.read(ConstPool.java:970)
        at javassist.bytecode.ConstPool.<init>(ConstPool.java:127)
        at javassist.bytecode.ClassFile.read(ClassFile.java:693)
        at javassist.bytecode.ClassFile.<init>(ClassFile.java:85)
        at org.hibernate.ejb.packaging.AbstractJarVisitor.checkAnnotationMatching(AbstractJarVisitor.java:243)
        at org.hibernate.ejb.packaging.AbstractJarVisitor.executeJavaElementFilter(AbstractJarVisitor.java:209)
        at org.hibernate.ejb.packaging.AbstractJarVisitor.addElement(AbstractJarVisitor.java:170)
        at org.hibernate.ejb.packaging.FileZippedJarVisitor.doProcessElements(FileZippedJarVisitor.java:119)
        at org.hibernate.ejb.packaging.AbstractJarVisitor.getMatchingEntries(AbstractJarVisitor.java:146)
        at …
Run Code Online (Sandbox Code Playgroud)

java hibernate cglib javassist

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

在CruiseControl.NET中提供OpenCover报告

我正在尝试将OpenCoverCruiseControl.NET集成.此时我已经通过构建系统进行了修改,因此它在OpenCover下运行我的nunit测试.然后,我使用ReportGenerator生成Xml和Html报告.

假设可以将ReportGenerator生成的报告集成到CruiseControl.NET webapp中,我该如何将它们集成?

NCover有自己的NCoverReporting任务可以使用,但由于我没有运行NCover,我无法将其输出与OpenCover生成的XML报告进行比较.

相关的想法/问题:

  • OpenCover默认生成一个XML文件,但cc.net可以使用该XML文件吗?
  • ReportGenerator还生成XML,它们是否适用于像cc.net这样的东西?
  • cc.net有一个合并日志的文件合并发布者,但我还没有找到任何文档,说明cc.net使用/使用哪些文件格式.

cruisecontrol.net code-coverage opencover reportgenerator

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

gdb错误消息:DW_OP_reg,DW_OP_piece和DW_OP_bit_piece

我正在调试其他人的Qt程序并遇到以下错误消息,我不明白:

DWARF-2 expression error: DW_OP_reg operations must be used either alone or in
conjuction with DW_OP_piece or DW_OP_bit_piece.
Run Code Online (Sandbox Code Playgroud)

我不确定这意味着什么,谷歌没有多大帮助.

这是上下文 - sLocationQString之前声明的几行.但是,它是从内联的函数创建的,所以我不确定它的值,并且我在尝试检查之前被追加到:

(gdb) printqstring suffix
(QString)0xffffbd80: "sorted"
(gdb) next
1241        sLocation += suffix;
(gdb) printqstring sLocation
Can't take address of "sLocation" which isn't an lvalue.
(gdb) info local
sLocation = <error reading variable sLocation (DWARF-2 expression error:
    DW_OP_reg operations must be used either alone or in conjuction with
    DW_OP_piece or DW_OP_bit_piece.)>
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下该错误信息的含义或可能导致的错误信息吗?

c++ debugging qt gdb

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

Autofac MVC 5 RegisterWebApiFilterProvider导致无法解析的IOverrideFilter

我有一个简单的MVC应用程序,我正在尝试添加一个异常过滤器.为此,我遵循Autofac WebAPI Integration文档,我相信它适用于Autofac.WebApi2 NuGet包.

首先,我创建了异常过滤器:

public class ErrorLoggingExceptionFilter : IAutofacExceptionFilter
{
    public void OnException(HttpActionExecutedContext context)
    {
        // do something 
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将AutofacControllerConfiguration属性添加到我想要应用异常过滤器的API控制器基类:

[AutofacControllerConfiguration]
public class ApiControllerBase : ApiController  {}
Run Code Online (Sandbox Code Playgroud)

然后我用Autofac 注册了异常过滤器:

builder.RegisterType<ErrorLoggingExceptionFilter>()
    .AsWebApiExceptionFilterFor<ApiControllerBase>()
    .InstancePerApiRequest();
Run Code Online (Sandbox Code Playgroud)

此时应用程序仍然正常运行,但异常过滤器没有运行,因此我注册了autofac的过滤器提供程序:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
Run Code Online (Sandbox Code Playgroud)

一旦添加,我开始得到500's,出现以下错误:

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Autofac.Features.Metadata.Meta1[System.Web.Http.Filters.IOverrideFilter]' can be invoked with the available services and parameters: Cannot resolve parameter 'System.Web.Http.Filters.IOverrideFilter value' of constructor 'Void .ctor(System.Web.Http.Filters.IOverrideFilter, System.Collections.Generic.IDictionary2[System.String,System.Object])'.

我没有在这个项目中使用任何元数据,也不知道任何事情IOverrideFilter …

asp.net-mvc autofac asp.net-web-api

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

Get-Member不会在(Start-Job)对象上显示Count成员?

据我所知,Get-Member可以显示一个对象的所有成员,但我看到一个Count我无法解释的成员:

PS> $job = start-job {dir c:\ }
PS> $job | get-member -Force -View All -MemberType All | select-string Count
# outputs nothing
PS> $job.Count
1
Run Code Online (Sandbox Code Playgroud)

伯爵成员来自哪里?

powershell powershell-3.0

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