所以我试图检索我的类中具有特定属性的所有私有方法.当我做
this.GetType().GetMethods()
Run Code Online (Sandbox Code Playgroud)
这将返回18个方法,所有方法都是公共的.所以我尝试修改它以使用如下的绑定标志:
this.GetType().GetMethods(BindingFlags.NonPublic);
Run Code Online (Sandbox Code Playgroud)
这导致零结果返回.然后我开始玩游戏,我无法完成任何GetMethods(BindingFlags.x)工作.
this.GetType().GetMethods(BindingFlags.Default);
this.GetType().GetMethods(BindingFlags.Public);
Run Code Online (Sandbox Code Playgroud)
所有这些都返回零结果.我究竟做错了什么?
我昨晚升级到Asp.net MVC 3 RC,然后按照发行说明中的说明进行操作.但是,正常的Aspx页面不再有效.
例如,当我转到根(Home/Index)时,会发生以下错误:
The view at '~/Views/Home/Index.aspx' must derive from ViewPage, ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.
Run Code Online (Sandbox Code Playgroud)
这是使用原始MVC Home/Index视图的几乎没有修改过的版本.代码是:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
Home Page
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p>
<%= Html.ActionLink("Project List", "List", "Project", new { area = "writing" }, null) %>
</p>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
它设置为从ViewPage继承,所以我不确定是什么问题.
主页面不会修改MVC安装的内容.
有任何想法吗?
我正在尝试创建一个单元测试,以确保我的所有业务类(我称之为命令和查询类)可以使用Windsor解决.我有以下单元测试:
[TestMethod]
public void Windsor_Can_Resolve_All_Command_And_Query_Classes()
{
// Setup
Assembly asm = Assembly.GetAssembly(typeof(IUnitOfWork));
IList<Type> classTypes = asm.GetTypes()
.Where(x => x.Namespace.StartsWith("MyApp.DomainModel.Commands") || x.Namespace.StartsWith("MyApp.DomainModel.Queries"))
.Where(x => x.IsClass)
.ToList();
IWindsorContainer container = new WindsorContainer();
container.Kernel.ComponentModelBuilder.AddContributor(new SingletonLifestyleEqualizer());
container.Install(FromAssembly.Containing<HomeController>());
// Act
foreach (Type t in classTypes)
{
container.Resolve(t);
}
}
Run Code Online (Sandbox Code Playgroud)
这失败,出现以下异常:
No component for supporting the service MyApp.DomainModel.Queries.Organizations.OrganizationByRegistrationTokenQuery+<>c__DisplayClass0 was found
Run Code Online (Sandbox Code Playgroud)
我知道<>c__DisplayClass0类型是由于Linq被编译,但是如何在我的Linq查询中没有硬编码名称的情况下过滤掉这些类型?
在我的应用程序中,我有一个属性网格,允许用户更改设置.这适用于字符串和其他值属性,但我现在需要的是一个可由用户编辑的字符串列表.
问题是如果我MyPropertyGrid.SelectedObject = new { Test = new List<string>() };在我的代码中并且用户尝试编辑该Test属性,当他们单击"添加"按钮时,会发生以下错误:
Constructor on type 'System.String' not found
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为字符串是不可变的.但是,我仍然需要一些方法来在属性网格中存储多个字符串(或类似字符串的数据).
有没有人对如何实现这一点有任何想法?
我似乎对如何In使用a 执行语句感到困惑SqlParameter.到目前为止,我有以下代码:
cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingList));
reader = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
settingsList是一个List<string>.当cmd.ExecuteReader()被调用时,ArgumentException由于无法将a映射List<string>到"已知的提供者类型" ,我得到了.
如何(安全地)In使用SqlCommands 执行查询?
我有一个相当大的webpack应用程序,它被大量组织成特定的段.使用纯javascript和jsx文件时,一切都很好用,因为随时我更新任何东西,它会逐步重建捆绑包.
我现在已经在同一个根目录中添加了一个新文件夹,并在其中创建了一个新的javascript文件.Webpack也知道它,因为它包含了包中的代码,并且只要它看到其他文件之一被更改,它就会正确地重建所有更改,包括在我的新javascript文件中.
但是,出于某种原因,每当我保存对这个javascript文件的更改时,webpack都不会检测到它需要从中重新加载更改.因此,如果我所做的唯一更改是在这个javascript文件中,则不会创建新的包,我必须ctrl+ c并重新运行webpack.
我已经尝试重命名文件夹,重命名javascript文件,以及其他几个没有帮助的情况.
任何人都可以对可能发生的事情有所了解,或者有什么方法可以获得有关webpack看到或未看到的更多信息?
我想弄清楚如何正确有效地单元测试我的Asp.net MVC项目.当我开始这个项目时,我买了Pro ASP.Net MVC,在那本书中我学到了TDD和单元测试.在看了这些例子,以及我在当前公司的QA担任软件工程师的事实后,我惊讶于TDD看起来有多棒.所以我开始研究我的项目并且为我的数据库层,业务层和控制器编写单元测试.在实施之前,所有东西都经过了单元测试.起初我觉得它很棒,但事情开始走下坡路.
以下是我遇到的问题:
我最终编写了应用程序代码,以便能够执行单元测试.我的意思并不是很好,因为我的代码被破坏了,我不得不修复它以便单元测试通过.我的意思是,由于使用linq进行数据检索(使用通用存储库模式),将数据库抽象为模拟数据库是不可能的.
原因是使用linq-> sql或linq->实体,您只需执行以下操作即可进行连接:
var objs = select p from _container.Projects select p.Objects;
Run Code Online (Sandbox Code Playgroud)
但是,如果您模拟数据库层,为了让linq通过单元测试,您必须将linq更改为
var objs = select p from _container.Projects
join o in _container.Objects on o.ProjectId equals p.Id
select o;
Run Code Online (Sandbox Code Playgroud)
这不仅意味着你正在改变你的应用程序逻辑,所以您可以单元测试,但你让你的代码的可测试性的唯一目的效率较低,并且摆脱了很多使用ORM在首位的优势.
此外,由于我的模型的许多ID都是数据库生成的,因此我证明必须编写额外的代码来处理非数据库测试,因为ID从未生成过,我不得不处理这些情况以便单元测试通过,但它们永远不会出现在真实场景中.
因此,我最终抛弃了我的数据库单元测试.
只要我返回视图,编写控制器的单元测试就很容易.但是,我的应用程序的主要部分(以及从单元测试中受益最多的部分)是一个复杂的ajax Web应用程序.出于各种原因,我决定将应用程序从返回视图更改为返回带有我需要的数据的JSON.在这发生之后,我的单元测试变得非常痛苦,因为我没有找到任何好的方法来为非平凡的json编写单元测试.
经过大量的时间试图找到一个单元测试JSON的好方法后,我放弃并删除了所有的控制器单元测试(到目前为止,所有控制器操作都集中在应用程序的这一部分).
所以我最后还是测试了服务层(BLL).现在我正在使用EF4,但我也遇到了linq-> sql这个问题.我选择使用EF4模型优先方法,因为对我而言,这样做是有道理的(定义我的业务对象并让框架弄清楚如何将其转换为sql后端).这在开始时很好,但现在由于人际关系而变得很麻烦.
例如说我有Project,User和Object实体.一个对象必须与项目相关联,并且项目必须与用户相关联.这不仅是数据库特定的规则,这些也是我的业务规则.但是,假设我想进行单元测试,我可以保存一个对象(举个简单的例子).我现在必须执行以下代码以确保保存工作:
User usr = new User { Name = "Me" };
_userService.SaveUser(usr);
Project prj = new Project { Name = "Test Project", Owner = usr };
_projectService.SaveProject(prj);
Object obj = new …Run Code Online (Sandbox Code Playgroud)我有以下代码:
class Program
{
static void Main(string[] args)
{
using (var stream = File.Create(@"C:\test.xml"))
{
var xml =
new XElement("root",
new XElement("subelement1", "1"),
new XElement("subelement2", "2"));
var doc = new XDocument(xml);
doc.Declaration = null;
doc.Save(stream);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图在没有xml声明的情况下保存XML,但即使我将声明归零XDocument,它仍然被保存到最终的XML中.
此代码输出:
<?xml version="1.0" encoding="utf-8"?>
<root>
<subelement1>1</subelement1>
<subelement2>2</subelement2>
</root>
Run Code Online (Sandbox Code Playgroud) 当用户填写表单时,他们使用下拉列表表示他们希望安排测试的时间.此下拉列表包含12小时上午/下午表格中15分钟增量的一天中的所有时间.因此,例如,如果用户选择下午4:15,则服务器将字符串发送"4:15 PM"到具有表单提交的Web服务器.
我需要一些如何将此字符串转换为Timespan,因此我可以将其存储在我的数据库的时间字段中(使用linq to sql).
有人知道将AM/PM时间字符串转换为时间跨度的好方法吗?
我最近意识到我的项目.Publish.xml文件正致力于源代码管理.虽然文件中的FTP密码似乎是加密的,但存储的安全性如何?可以由第三方进行逆向设计吗?
c# ×7
asp.net-mvc ×2
reflection ×2
ado.net ×1
architecture ×1
deployment ×1
javascript ×1
linq-to-xml ×1
propertygrid ×1
publishing ×1
sql ×1
sqlcommand ×1
string ×1
tdd ×1
timespan ×1
unit-testing ×1
webpack ×1
winforms ×1
xml ×1