小编Ami*_*ira的帖子

构造函数外部的C#对象构造

当涉及到设计类和它们之间的"通信"时,我总是试图以这样的方式设计它们,使得所有对象构造和组合都发生在对象构造函数中.我不喜欢从外部发生对象构造和组合的想法,就像其他对象设置属性和调用我的对象上的方法来初始化它一样.当多个对象尝试对您的对象执行此操作并且您永远不知道您的props\methods将以何种顺序执行时,这尤其会变得丑陋.

不幸的是,我常常对这种情况感到困惑,特别是现在随着依赖注入框架的日益普及,许多库和框架依赖于某种外部对象初始化,并且通常不仅需要对我们的对象进行构造函数注入,而且还要求属性注入.

我的问题是:

  1. 是否可以让对象依赖于某些方法,或者在它们上调用属性,之后他们可以认为它们被初始化了?

  2. 当你的对象是接收器时,它是某种模式,并且必须支持多个调用它的接口,这些调用的顺序是否重要?(比设置标志更好的东西,比如ThisWasDone,ThatWasCalled)

c# dependency-injection

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

如何使用 PyClips 激活规则来调用 python 函数

我正在试验PyClips,我想将其与 Python 紧密集成,以便当激活规则时,它会调用 python 函数。

\n\n

这是我到目前为止所拥有的:

\n\n
import clips\n\ndef addf(a, b):\n    return a + b\n\nclips.RegisterPythonFunction(addf)\n\nclips.Build("""\n(defrule duck\n  (animal-is duck)\n  =>\n  (assert (sound-is quack))\n  (printout t "it\xe2\x80\x99s a duck" crlf))\n  (python-call addf 40 2 )\n""")\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,当我断言“动物是鸭子”这一事实时,我的 python 函数没有被调用:

\n\n
>>> clips.Assert("(animal-is duck)")\n<Fact \'f-0\': fact object at 0x7fe4cb323720>\n>>> clips.Run()\n0\n
Run Code Online (Sandbox Code Playgroud)\n\n

我究竟做错了什么?

\n

python expert-system clips pyclips

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

应该在 Python 中为专家系统使用知识引擎吗?

我需要用 Python 编写一个专家系统(这是我第一次这样做)。我必须实现一个大流程图,它依赖于渐进式用户输入,即用户在流程图的许多点提供输入。在python中,我见过像PyKE这样的知识库和推理规则系统;但是,我不明白这样的系统(类 Prolog)是否会帮助我处理许多 GUI 窗口向用户提出许多问题的过程,或者最好手动对其进行编程。

我应该使用像 PyKE 这样的系统吗?

python code-reuse expert-system pyke

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

如何使用Roslyn C#编译器进行自举?

我开始阅读关于"Roslyn"的新C#编译器,并想知道Roslyn编译器是如何编译的?
我明白为了拥有"自托管编译器"需要使用boostrapping,我想知道Roslyn编译器是如何"自举"的?

c# compiler-construction compilation roslyn

5
推荐指数
2
解决办法
450
查看次数

使用C#构建脚本

有关以下内容的见解,请阅读:http://martinfowler.com/articles/rake.html

我最近一直在使用Rake(和Albacore),很喜欢它.当我需要Ruby语言的时候,大部分时间都可以使用它.

我必须承认我在C#的家里有更多的东西 - 这让我想到在.NET世界中是否有相当于Rake的东西.

我正在寻找的是一种在C#中编写构建脚本的方法,或者可能是DSL,具有相同的依赖编程模型,我也可以使用C#.

也许我离开基地问这个问题.但是,如果可以使用Ruby(以及内部DSL),那么我无法立即说明为什么C#不可能实现同样的目标.我当然不明白为什么还没有完成:-)

任何人都对这个问题有一些看法?

我们已经知道的:

  • 需要编译C#才能运行,因此我们需要创建一个单独的构建脚本,该脚本在运行时由可执行文件进行解析和编译.

提前致谢!

使用"Cake" http://cakebuild.net/ - 使用Roslyn编译器,我想要的(多年前)现在可以实现.谢谢微软.感谢编写Cake的人们.

另一种方法是使用Powershell.该图书馆名为Psake(saké)

c# rake dsl build-script cakebuild

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

结尾带有`this()` 的结构构造函数和没有结尾的结构构造函数有什么区别?

假设我们有这两个结构......

public struct Example
{
    public int Number { get; set; }

    public Example(int Number)
    {
        Number = number;
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

public struct Example
{
    public int Number { get; set; }

    public Example(int number) : this()
    {
        Number = number;
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以看到有一个结构体,**this()**最后有一个构造函数,另一个没有。

两者有什么区别?

c# constructor struct

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

C#:将一个部分类转换为父类并将其放入一个Dictionary中

说我有以下课程:

public class Parent
{
   public Property1 {get;set;}
   public Property2 {get;set;}
}

public partial class Child : Parent { }

public partial class Cousin : Parent { }
Run Code Online (Sandbox Code Playgroud)

我有返回IQueryable<Child>IQueryable<Cousin>使用Property1和Property2的方法.

是否可以将两个列表添加到一个Dictionary<string, List<Parent>>

我试过了:

var childList = db.GetChildList() as List<Parent>;
Run Code Online (Sandbox Code Playgroud)

但是这会返回null.

List<Child>在将它添加到字典之前,我是否必须返回并将它们添加到List中?

谢谢

c# dictionary list

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

C#中的自定义列表

我想在c#中创建自定义列表.在我的自定义列表中,我只想创建自定义函数Add(T),其他方法应保持不变.

当我做:

public class MyList<T> : List<T> {}
Run Code Online (Sandbox Code Playgroud)

我只能在此改变3个功能:Equals,GetHashCodeToString.

当我做

public class MyList<T> : IList<T> {}
Run Code Online (Sandbox Code Playgroud)

我必须实现所有方法.

谢谢

c# generics collections inheritance

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

如何检查Mock对象上是否调用了特定的属性setter?

对于下面给出的模拟对象,如何检查WashCar(ICar car)方法是否设置了TiresWashed属性?

public interface ICar 
{
    string Model {get;set;}
    bool TiresWashed {get; set;}
    bool WindowsWashed {get; set; }
}

    [TestMethod]
    public vouid MyUnitTest()
    {
    ICar mockCar = MockRepository.GenerateMock<ICar>();
    CarServiceUtility.WashCar(mockCar);

    //Assert if PrepareCar method is called: (this is why I had mock)
    mockCar.AssertWasCalled(c=>c.PrepareCar());

    //TODO 
    // Assert if mockCar.TiresWashed is set with any value
    }
Run Code Online (Sandbox Code Playgroud)

.net c# unit-testing rhino-mocks

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

MVCContrib TestHelper和User.Identity.Name,Server.MapPath和Form Collection

我是MVCContrib Testhelper的新手和犀牛嘲笑.

我需要协助单元测试依赖于User.Identity.Name,Server.MapPath和Form Collection的控制器.

我开始了

var controller = new SubmitController();
var builder = new TestControllerBuilder();
builder.InitializeController(controller);
Run Code Online (Sandbox Code Playgroud)

我找到了这篇文章来设置User.Identity.Name

controller.ControllerContext = TestHelper.MockControllerContext(controller).WithAuthenticatedUser("domain\\username");
Run Code Online (Sandbox Code Playgroud)

此时,在我的控制器中,我现在可以访问User.Identity.然后问题变成了如何设置Form Collection变量.设置

builder.Form.Add("testvar","1");
Run Code Online (Sandbox Code Playgroud)

不再工作了.现在我似乎必须访问通过

controller.HttpContext.Request.Form.Add("testvar","1)
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但在这一点上,我不再使用上面的构建器(TestControllerBuilder).

然后,我不得不模拟服务器,这引起了更多的问题.如何继续使用构建器,但为httpContext,HttpRequest,Server等使用模拟或存根.我有点期望构建器具有为HttpRequest,Server等设置期望值的方法.

谢谢

unit-testing rhino-mocks mvccontrib mvccontrib-testhelper

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