所以我是TDD的新手,我使用MVP模式成功创建了一个不错的小样本应用程序.我当前解决方案的主要问题是它阻止了UI线程,所以我试图设置Presenter以使用SynchronizationContext.Current,但是当我运行我的测试时,SynchronizationContext.Current为null.
演讲者在线程之前
public class FtpPresenter : IFtpPresenter
{
...
void _view_GetFilesClicked(object sender, EventArgs e)
{
_view.StatusMessage = Messages.Loading;
try
{
var settings = new FtpAuthenticationSettings()
{
Site = _view.FtpSite,
Username = _view.FtpUsername,
Password = _view.FtpPassword
};
var files = _ftpService.GetFiles(settings);
_view.FilesDataSource = files;
_view.StatusMessage = Messages.Done;
}
catch (Exception ex)
{
_view.StatusMessage = ex.Message;
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
线程测试
[TestMethod]
public void Can_Get_Files()
{
var view = new FakeFtpView();
var presenter = new FtpPresenter(view, new FakeFtpService(), new FakeFileValidator());
view.GetFiles();
Assert.AreEqual(Messages.Done, …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人知道使用JQuery find方法或inArray方法查找数组中的项目的方法.我似乎无法在文档中找到任何内容.
例如:
var items = [{id:1, name:'bob'}, {id:2, name:'joe'}, {id:3, name:'ben'}];
var found = $(items).find("[name='ben']");
Run Code Online (Sandbox Code Playgroud)
要么
var items = [{id:1, name:'bob'}, {id:2, name:'joe'}, {id:3, name:'ben'}];
var found = $.inArray("[name='ben']", items);
Run Code Online (Sandbox Code Playgroud) 我有一个带有usercontrol的主窗口.在usercontrol的默认构造函数中添加代码时,设计器停止显示主窗口.它给出了一个信息:
加载问题
该文档包含必须在加载设计器之前修复的错误.
修复错误后重新加载设计器.重新加载设计师
为什么是这样?
这是我在构造函数中的代码:
using (var context = new Data.TVShowDataContext())
{
var list = from show in context.Shows
select show;
listShow.ItemsSource = list;
}
Run Code Online (Sandbox Code Playgroud)
如果我不能使用构造函数来填充gui数据,我应该什么时候做呢?用绑定做这个会更好吗?任何sugestions怎么样?
我没有太多使用yield关键字的经验.我有类型转换的这些IEnumerable <T>扩展.
我的问题是第一个重载方法是否具有与第二个方法相同的收益返回效果?
public static IEnumerable<TTo> ConvertFrom<TTo, TFrom>(this IEnumerable<TFrom> toList)
{
return ConvertFrom<TTo, TFrom>(toList, TypeDescriptor.GetConverter(typeof(TTo)));
}
public static IEnumerable<TTo> ConvertFrom<TTo, TFrom>(this IEnumerable<TFrom> toList, TypeConverter converter)
{
foreach (var t in toList)
yield return (TTo)converter.ConvertFrom(t);
}
Run Code Online (Sandbox Code Playgroud) 我有一个查询:
var function = GetSomeExpression();
using (FooModel context = new FooModel())
{
var bar = context.Bar.Where(function);
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个可以在上下文中针对不同实体执行Where的泛型方法.目标不是必须做context.Bar.Where,context.Car.Where,Context.Far.Where等.
一些无法做到的事情,但说明了目标是:
var q = context.GetObjectContext(T).Where(queryFunction);
Run Code Online (Sandbox Code Playgroud)
我已经研究过使用Relfection并且可以获取Where方法,但是不知道如何针对在委托中传递的上下文执行它.我也看过DynamicMethod,但做整个IL事情并不喜欢吸引人.
到目前为止我所拥有的:
private List<T> GetResults<T>(Expression<Func<T, bool>> queryFunction)
{
// note: first() is for prototype, should compare param type
MethodInfo whereMethod = typeof(Queryable).GetMethods()
.Where(m => m.Name == "Where")
.First().MakeGenericMethod(typeof(T));
// invoke the method and return the results
List<T> result = whereMethod.Invoke(
// have the method info
// have the expression
// can reference the context
);
throw new …Run Code Online (Sandbox Code Playgroud) 我在共享服务器上运行ASP.NET MVC,我在通过System.Data.EntityClient连接到SQL时遇到问题.下面是我的软件提供商给我连接到SQL的连接字符串以及VS在开发期间为我的本地机器配置的连接字符串,当我部署到服务器时,我的连接字符串应该是什么样子?
来自我的托管服务商:
<add name="WeddingsDBEntities"
connectionString="data Source=<server name>; Initial Catalog=<db name>; User ID=<user ID>; Password=<password>;"
providerName="System.Data.EntityClient"/>
Run Code Online (Sandbox Code Playgroud)
来自VS(开发期间):
connectionString="metadata=res://*/Models.WeddingsModel.csdl|res://*/Models.WeddingsModel.ssdl|res://*/Models.WeddingsModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\WeddingsDB.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"
Run Code Online (Sandbox Code Playgroud)
谢谢!
问题很简单我有一个进程,它在某些xml文件上执行ETL.我们开始获得非常大的xml文件,并开始获得OutOfMemoryExceptions.
修复过程相对简单.但是,我想为我的NUnit套件进行单元测试,以确保该过程将继续能够处理真正大的文件.但是,实际上我的开发工作站上的内存不足会降低我的机器速度,而且非常耗时.在版本控制中存储一个巨大的测试文件也是一个坏主意.如果我可以人为地限制一个进程,线程或appdomain只使用固定数量的ram,让我说128 megs,我可以进行一个小型的单元测试,不会让我的工作站瘫痪.
有什么建议?他们的一些非托管API是否可以P/Invoke?
比如说我创造了一只鸭子
Duck myDuck = DuckFactory.CreateDuck();
Run Code Online (Sandbox Code Playgroud)
在过去,我总是检查myDuck是否为空
if (myDuck == null)
{
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
我最近查看了一些首先检查null的代码.
if (null == myDuck)
{
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这些是相同的,但这两者之间有什么不同吗?一个人对另一个人有任何表现上的好处吗?是否有建议的最佳做法来检查对象是否为空?
我有IRepository <T>,并实现了SqlRepository <T>.SqlRepository在构造函数中有DataContext参数.
SM配置如下所示:
x.ForRequestedType(typeof(IRepository<>))
.TheDefaultIsConcreteType(typeof(SqlRepository<>));
x.ForRequestedType<DataContext>().CacheBy(InstanceScope.Hybrid)
.TheDefault.Is.ConstructedBy(()=>{
var dc = new FirstDataContext();
dc.Log = new DebuggerWriter();
return dc;
});
Run Code Online (Sandbox Code Playgroud)
但是为了构建IRepository <SpecificObject>,我想注入不同的DataContext.我怎么说SM当我要求IReposiotry <SpecificObject>我想要不同的DataContext,而不是FirstDataContext而是SecondDataContext(DC转到不同的数据库).
例如,当我要求IRepository <T>时,我想要注入FirstDataContext,但是当我要求明确表示IRepository <Product>时,我想要注入SecondDataContext.
此外,SecondDC应该是由SM缓存的混合!
c# ×6
.net ×3
asp.net ×1
constructor ×1
generics ×1
jquery ×1
mvp ×1
nunit ×1
structuremap ×1
tdd ×1
unit-testing ×1
wpf ×1
yield ×1