正如标题所说,如何使用反射检查类定义是否定义为内部?"typeof(...)"返回下面显示的某些属性,但不返回类是否定义为内部属性.看了谷歌,但我能找到的很多关于使用反射运行内部或受保护方法的文章.这不是我对这种情况感兴趣的方法,而是类定义.
var type = typeof(Customer);
Assert.IsTrue(type.IsClass);
Assert.That(type.IsAbstract, Is.EqualTo(isAbstract));
Assert.That(type.IsPublic, Is.EqualTo(isPublic));
Assert.That(type.IsPublic, Is.EqualTo(isPublic));
Assert.That(type.IsSealed, Is.EqualTo(isSealed));
Assert.That(type.IsSerializable, Is.EqualTo(isSerializable));
Run Code Online (Sandbox Code Playgroud) 我们刚刚开始使用Log4Net(并且希望我们之前完成它).虽然我们可以看到内部异常等,但是在记录异常时输出中似乎缺少的一件事是"Exception.Data"中保存的任何键/值信息.无论如何我们可以"开箱即用"吗?如果没有,因为我们真的只是刚刚开始寻找实现此功能的方法?
作为示例,请参阅下面的基本伪代码.我们不想用上下文信息污染异常消息只是问题所在(我们可能已经丢失了更多有助于调查实际问题的数据信息).但是现在我们在日志中看到的只是异常类型,消息,任何堆栈跟踪 - 但没有异常"数据".这意味着在我们的日志中我们丢失了客户ID等.我们如何轻松地将这些信息记录到我们的日志中(无需在每个异常捕获中手动编写代码).
try
{
var ex = new ApplicationException("Unable to update customer");
ex.Data.Add("id", customer.Id);
throw ex;
}
catch(ApplicationException ex)
{
logger.Error("An error occurred whilst doing something", ex);
throw;
}
Run Code Online (Sandbox Code Playgroud) 使用Automapper,如何处理对象的属性值到字符串实例的映射.基本上我有一个Role对象列表,我想使用Automapper将每个"name"属性的内容映射到相应的字符串列表(所以我最后得到一个字符串列表).我确信它有一个明显的答案,但我找不到我需要添加到"CreateMap"以使其工作的映射.
相关代码的示例如下所示:
public class Role
{
public Guid Id{get;set;}
public string Name{get;set;}
...
...
}
// What goes in here?
Mapper.CreateMap<Role, string>().ForMember(....);
var allRoles = Mapper.Map<IList<Role>, IList<string>>(roles);
Run Code Online (Sandbox Code Playgroud) 我正在尝试为Nhibernate编写一个挂钩到PreUpdate事件的审计跟踪.我有一个AuditLogEntry类(when,who等),它包含一个AuditLogEntryDetails列表(即更改的各个属性).如果我将AuditLogEntry类与正在审计的实体隔离,那么我的代码运行时没有错误.但是,如果我将AuditLogEntry列表添加到正在审核的实体中,那么我的代码会抛出一个
flush()未处理集合[DomainObjects.AuditTracking.AuditLogEntry.Details]
当我尝试将修改后的列表保存在事件侦听器中时,断言失败.只有当审计项目在列表中已有一个(或多个)AuditLogEntry实例时,才会发生这种情况.如果没有条目,则创建新列表并将其添加到正在审计的实体中,这很好.
我认为通过将问题隔离到上面,它似乎是(懒惰)加载现有列表以添加AuditLogEntry的新实例.但是我无法继续前进.将"Lazy ="False"'添加到列表映射似乎没有帮助.我真的在使用NHibernate的早期,从HN 3.0 Cookbook和这篇博文中借用了概念.我的代码与此非常相似,但尝试将审核历史记录添加到列表中正在审核的项目中(因此我认为我还需要在pre,而不是post update事件中执行此操作).
有问题的实体接口/类的快照是:
public class AuditLogEntry : Entity
{
public virtual AuditEntryTypeEnum AuditEntryType { get; set; }
public virtual string EntityFullName { get; set; }
public virtual string EntityShortName { get; set; }
public virtual string Username { get; set; }
public virtual DateTime When { get; set; }
public virtual IList<AuditLogEntryDetail> Details { get; set; }
}
public interface IAuditTrackedEntity
{
Guid Id { get; }
IList<AuditLogEntry> ChangeHistory { get; set; …Run Code Online (Sandbox Code Playgroud) 我们的应用程序有选项卡,其中一个片段可以包含webview客户端.用户现在报告webviewclient无法加载页面的问题.我们已经确认服务器已启动并运行,我们还发现问题发生在v4.3和所有早期版本中.我们也确认它在v5.0中运行良好; 现在我们无法测试它是否在4.4中工作(我猜这些信息只有在知道4.4和更新版本中发生的更改会导致所有早期版本中的某些内容失败时才有用).
所以实际问题是我们创建了webviewclient并将其加载到片段中,在这个场景中,所有版本的网页(通过HTTPS连接)都会完美地加载.对于v5.0,我们可以单击另一个选项卡,然后返回到带有webviewclient的选项卡; 我们可以看到正在创建的片段,一切都按预期工作,网页按预期加载.但是对于v4.3及更早版本,我们看到正在创建片段,但webviewclient会使用-11错误代码触发onReceivedError(无法建立安全连接).在调试日志中进一步查看我们得到握手错误,这是调用的日志.有趣的是,我们连接的网站可以接受TLS1.2; 我们可以看到,当我们使用Firefox访问URL并使用开发工具等时,错误也非常有趣.
04-24 14:38:52.415: W/chromium(15434): external/chromium/net/http/http_stream_factory_impl_job.cc:865: [0424/143852:WARNING:http_stream_factory_impl_job.cc(865)] Falling back to SSLv3 because host is TLS intolerant:
04-24 14:38:52.446: V/chromium(15434): external/chromium/net/socket/ssl_client_socket_openssl.cc:310: [0424/143852:INFO:ssl_client_socket_openssl.cc(310)] ssl_ctx_ is used
04-24 14:38:52.469: E/chromium(15434): external/chromium/net/socket/ssl_client_socket_openssl.cc:899: [0424/143852:ERROR:ssl_client_socket_openssl.cc(899)] handshake failed; returned 0, SSL error code 5, net_error -107
04-24 14:38:52.469: V/chromium(15434): external/chromium/net/socket/ssl_client_socket_openssl.cc:508: [0424/143852:INFO:ssl_client_socket_openssl.cc(508)] ~SSLClientSocketOpenSSL()
04-24 14:38:52.469: I/GATE(15434): <GATE-M>DEV_ACTION_ERROR</GATE-M>
04-24 14:38:52.477: V/webkit(15434): reportError errorCode(-11) desc(Couldn't establish a secure connection.)
04-24 14:38:52.532: I/GATE(15434): <GATE-M>DEV_ACTION_COMPLETED</GATE-M>
Run Code Online (Sandbox Code Playgroud)
挖掘它看起来我们可能需要覆盖SSLProtocolFactory; 但这似乎是自签名证书等.我们正在连接到一个知名的第三方,他们的证书似乎没有任何问题.与往常一样,它可能感觉像我们早期版本的Android所缺少的东西; 或解决某些已在新版本中修复但未确定下一步要查看的内容.
我在用
<android.support.design.widget.BottomNavigationView/>
Run Code Online (Sandbox Code Playgroud)
在我的Android应用程序中设置BottomNavigationView。我的问题是 如何为Android BottomNavigationView设置通知计数?请帮助我从中脱颖而出。
在当前(C#)项目中,我们有一个包含非接口连接对象的第三方程序集.使用IoC等我们可以将这个具体实例注入到我们的代码中,但它证明了单元测试等的噩梦.我们使用MoQ作为我们的模拟框架,所以理想情况下可以使用接口来解决问题,我们不想要沿着使用像Moles这样的东西的路线,因为我们希望最小化技术.
如果我们创建一个界面来模仿第三方连接对象的所需功能,然后创建包含第三方对象实例的该接口的实现者,那么这将允许我们的代码在接口上工作,我们的IoC和单元测试都将要开心.然而,在讨论中,我们已经围绕它确实是哪种设计模式!
所以问题是," 上面描述的情况如下并在下面的代码中说明: "
namespace ExampleCode
{
public interface IConnector
{
void Open();
}
public class ConnectorWrapper : IConnector
{
ThirdPartyConnector _instance;
public ConnectorWrapper(ThirdPartyConnector instance)
{
_instance = instance;
}
void Open()
{
_instance.Open();
}
}
}
Run Code Online (Sandbox Code Playgroud) 有没有办法确保从hackage下载的真实性?据我所见,什么都没有.没有针对hackage的https,也没有针对tarball的(强)校验和,也没有签名.
那么:如何从hackage验证下载的真实性?
有没有人知道Visual Studio 2010专业版的任何免费(关键点我害怕)代码覆盖工具.我知道有商业产品,如NCover和DotCover,但由于预算考虑,这些不能被考虑.出于类似的原因,也无法考虑升级到内置代码覆盖的VS版本.
环顾四周,我看到Java开发人员似乎有很多免费选项,但似乎没有针对.NET开发人员的任何(VS集成)选项.请注意,我正在寻找VS集成解决方案.我知道有一个免费的社区版NCover从命令行运行,但只有商业版与VS IDE集成.
编辑:如果没有人真正意识到当前可用的任何免费工具,是否有人可以提供有关如何创建在源窗口中装饰代码的VS插件的教程的指针?
我正在尝试对自定义ValueResolver(Automapper)进行单元测试,但遇到了问题,因为它强制我覆盖的方法没有直接暴露在我们必须创建的自定义对象中.我重写了受保护的方法"ResolveCore",但暴露的唯一公共方法是"Resolve",它需要一个复杂的"ResolutionResult"automapper对象作为它的输入.在真正的单元测试的过程中,我想要将这个对象/方法单独测试到其他任何东西,并且不想真正想要使用映射启动automapper来进行此测试.同样地,模拟"ResolutionResult"是不可能的,并且为每个测试设置它似乎是一个非常复杂的对象(再次需要创建/关联其他Automapper对象).
我能想出的唯一(不太理想的)解决方案(并且在Googling寻求解决方案时已经看到建议)是在类中隐藏一个暴露受保护的覆盖方法的公共方法.如果我们必须沿着这条路走,那么就这样吧,但是还有其他人有更好的解决方案,单独测试方法调用不需要修改我们试图测试的对象吗?
示例代码:
public class CustomResolver : ValueResolver<Supplier, string>
{
protected override string ResolveCore(Custom source)
{
return string.Format("{0} {1}", source.Name, source.Descripton);
}
public string UnitTestStub(Custom source)
{
return ResolveCore(source);
}
}
Run Code Online (Sandbox Code Playgroud) android ×2
automapper ×2
unit-testing ×2
c# ×1
exception ×1
hackage ×1
haskell ×1
log4net ×1
nhibernate ×1
nunit ×1
oop ×1
reflection ×1