当涉及到设计类和它们之间的"通信"时,我总是试图以这样的方式设计它们,使得所有对象构造和组合都发生在对象构造函数中.我不喜欢从外部发生对象构造和组合的想法,就像其他对象设置属性和调用我的对象上的方法来初始化它一样.当多个对象尝试对您的对象执行此操作并且您永远不知道您的props\methods将以何种顺序执行时,这尤其会变得丑陋.
不幸的是,我常常对这种情况感到困惑,特别是现在随着依赖注入框架的日益普及,许多库和框架依赖于某种外部对象初始化,并且通常不仅需要对我们的对象进行构造函数注入,而且还要求属性注入.
我的问题是:
是否可以让对象依赖于某些方法,或者在它们上调用属性,之后他们可以认为它们被初始化了?
当你的对象是接收器时,它是某种模式,并且必须支持多个调用它的接口,这些调用的顺序是否重要?(比设置标志更好的东西,比如ThisWasDone,ThatWasCalled)
我正在试验PyClips,我想将其与 Python 紧密集成,以便当激活规则时,它会调用 python 函数。
\n\n这是我到目前为止所拥有的:
\n\nimport 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""")\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n我究竟做错了什么?
\n我需要用 Python 编写一个专家系统(这是我第一次这样做)。我必须实现一个大流程图,它依赖于渐进式用户输入,即用户在流程图的许多点提供输入。在python中,我见过像PyKE这样的知识库和推理规则系统;但是,我不明白这样的系统(类 Prolog)是否会帮助我处理许多 GUI 窗口向用户提出许多问题的过程,或者最好手动对其进行编程。
我应该使用像 PyKE 这样的系统吗?
我开始阅读关于"Roslyn"的新C#编译器,并想知道Roslyn编译器是如何编译的?
我明白为了拥有"自托管编译器"需要使用boostrapping,我想知道Roslyn编译器是如何"自举"的?
有关以下内容的见解,请阅读:http://martinfowler.com/articles/rake.html
我最近一直在使用Rake(和Albacore),很喜欢它.当我需要Ruby语言的时候,大部分时间都可以使用它.
我必须承认我在C#的家里有更多的东西 - 这让我想到在.NET世界中是否有相当于Rake的东西.
我正在寻找的是一种在C#中编写构建脚本的方法,或者可能是DSL,具有相同的依赖编程模型,我也可以使用C#.
也许我离开基地问这个问题.但是,如果可以使用Ruby(以及内部DSL),那么我无法立即说明为什么C#不可能实现同样的目标.我当然不明白为什么还没有完成:-)
任何人都对这个问题有一些看法?
我们已经知道的:
提前致谢!
解
使用"Cake" http://cakebuild.net/ - 使用Roslyn编译器,我想要的(多年前)现在可以实现.谢谢微软.感谢编写Cake的人们.
另一种方法是使用Powershell.该图书馆名为Psake(saké)
假设我们有这两个结构......
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()**最后有一个构造函数,另一个没有。
两者有什么区别?
说我有以下课程:
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#中创建自定义列表.在我的自定义列表中,我只想创建自定义函数Add(T),其他方法应保持不变.
当我做:
public class MyList<T> : List<T> {}
Run Code Online (Sandbox Code Playgroud)
我只能在此改变3个功能:Equals,GetHashCode和ToString.
当我做
public class MyList<T> : IList<T> {}
Run Code Online (Sandbox Code Playgroud)
我必须实现所有方法.
谢谢
对于下面给出的模拟对象,如何检查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) 我是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等设置期望值的方法.
谢谢
c# ×7
python ×2
rhino-mocks ×2
unit-testing ×2
.net ×1
build-script ×1
cakebuild ×1
clips ×1
code-reuse ×1
collections ×1
compilation ×1
constructor ×1
dictionary ×1
dsl ×1
generics ×1
inheritance ×1
list ×1
mvccontrib ×1
pyclips ×1
pyke ×1
rake ×1
roslyn ×1
struct ×1