关于ninject的最新版本(2.2.1.4)有几个问题.
试图将Linq2sql绑定DataContext
到具体实现InRequestScope
(在类库项目中)
Bind<DataContext>().To<MoneywatchDataContext>()
Run Code Online (Sandbox Code Playgroud)
但找不到InRequestScope
方法
最后这样做,
Bind<DataContext>().To<MoneywatchDataContext>().InScope(ctx => HttpContext.Current)
Run Code Online (Sandbox Code Playgroud)
只是想知道是否:
InRequestScope
Method 完全相同.HTTContext.Current
的GC被用时,底层DataCotext
也将被处理掉.我有一个接口ITransaction如下:
public interface ITransaction {
DateTime EntryTime { get; }
DateTime ExitTime { get; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个派生类PaymentTransaction如下:
public class PaymentTransaction : ITransaction {
public virtual DateTime LastPaymentTime
{
get { return DateTime.Now; }
}
#region ITransaction Members
public DateTime EntryTime
{
get { throw new NotImplementedException(); }
}
public DateTime ExitTime
{
get { throw new NotImplementedException(); }
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
我想模拟PaymentTransaction对象的所有三个属性.
我尝试了以下,但它不起作用:
var mockedPayTxn = new Mock<PaymentTransaction>();
mockedPayTxn.SetUp(pt => pt.LastPaymentTime).Returns(DateTime.Now); // This works
var mockedTxn = mockedPayTxn.As<ITransaction>();
mockedTxn.SetUp(t => …
Run Code Online (Sandbox Code Playgroud) 我最近一直在使用System.Math,有一天我想知道微软将如何在库中实现Sqrt方法.所以我弹出了我最好的伙伴Reflector并尝试反汇编库中的方法,但它显示:
[MethodImpl(MethodImplOptions.InternalCall),ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern double Sqrt(double d);
Run Code Online (Sandbox Code Playgroud)
那天有史以来第一次,我意识到我的孩子依赖于框架,吃饭.
开玩笑,但我想知道MS会用什么样的算法来实现这个方法,换句话说,如果你没有库支持,你将如何用C#编写自己的Math.Sqrt实现.
干杯
我有一个外围驱动程序,它使用串行端口与外围设备通信.我想对这个驱动程序进行单元测试,并试图模拟串口.因此,我为框架类型SerialPort创建了一个包装器,以使其实现一个接口:
public interface IScannerPort
{
Handshake Handshake { get; set; }
bool IsOpen { get; }
event SerialDataReceivedEventHandler DataReceived;
void Close( );
void Open( );
string ReadLine( );
}
Run Code Online (Sandbox Code Playgroud)
现在我使用moq创建了一个模拟:
Mock<IScannerPort> scannerPort = new Mock<IScannerPort>( );
Run Code Online (Sandbox Code Playgroud)
然后我想提出这个DataReceived
事件.但是SerialDataReceivedEventArgs不允许我设置EventType属性.所以我也尝试模拟SerialDataReceivedEventArgs,最后用
Mock<SerialDataReceivedEventArgs> args = new Mock<SerialDataReceivedEventArgs>();
args.SetupProperty(a => a.EventType, SerialData.Eof);
Run Code Online (Sandbox Code Playgroud)
但第二行引发NotSupportedException:非虚拟(在VB中可覆盖)成员上的无效设置:a => a.EventType
我该如何举办活动?或者我如何模拟事件args?
我无法理解为什么这个测试会因消息"Assert.AreEqual失败而失败.预期:<2>.实际:<1>."
[TestMethod]
public void Test()
{
char[] a1 = "abc".ToCharArray();
char[] a2 = {'a', 'b', 'c', ' ', ' '};
Assert.AreEqual(2, a2.Except(a1).Count());
}
Run Code Online (Sandbox Code Playgroud)
但以下内容将通过:
[TestMethod]
public void Test()
{
char[] a1 = "abc".ToCharArray();
char[] a2 = {'a', 'b', 'c', ' ', 'd', ' '};
Assert.AreEqual(2, a2.Except(a1).Count());
}
Run Code Online (Sandbox Code Playgroud) 我试图在HTTP处理程序中重现线程错误条件.
基本上,ASP.net工作程序正在创建2个线程,当某个页面加载时,它会同时调用我的应用程序中的HTTP处理程序.
在http处理程序内部,是一个非线程安全的资源.因此,当2个线程同时尝试访问它时,会发生异常.
我可能会在资源周围放置一个锁定语句,但是我想确保它实际上就是这种情况.所以我想首先在控制台应用程序中创建这种情况.
但我不能像asp.net wp那样同时获得2个线程来执行一个方法.所以,我的问题是如何创建2个可以同时执行方法的线程.
编辑:
底层资源是带有用户表的sql数据库(仅具有名称列).这是我试过的示例代码.
[TestClass]
public class UnitTest1
{
[TestMethod]
public void Linq2SqlThreadSafetyTest()
{
var threadOne = new Thread(new ParameterizedThreadStart(InsertData));
var threadTwo = new Thread(new ParameterizedThreadStart(InsertData));
threadOne.Start(1); // Was trying to sync them via this parameter.
threadTwo.Start(0);
threadOne.Join();
threadTwo.Join();
}
private static void InsertData( object milliseconds )
{
// Linq 2 sql data context
var database = new DataClassesDataContext();
// Database entity
var newUser = new User {Name = "Test"};
database.Users.InsertOnSubmit(newUser);
Thread.Sleep( (int) milliseconds);
try
{ …
Run Code Online (Sandbox Code Playgroud) 我是一名WCF新手.我正在托管一个由第三方应用程序(TPA)调用的WCF服务.TPA要求wcf服务响应具有自定义标头,响应soap信封应如下所示:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:stan="http://client/schema/framework/header/standardheaderresponse"
xmlns:sys="http://client/schema/framework/common/systemidentifier" >
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<stan:StandardHeaderResponse>
<stan:From>
<sys:Identifier>BUS</sys:Identifier>
<sys:Name>BuildingEvent</sys:Name>
<sys:Version>1</sys:Version>
</stan:From>
<stan:Timestamp>2013-03-15T03:05:41.000</stan:Timestamp>
<stan:CorrelationID>uuid:c12c9e48-8164-4074-9c8c-2b979804dbd2</stan:CorrelationID>
</stan:StandardHeaderResponse>
<wsa:Action>
http://client/service.buildingloc.event.BuildingEvent.SendEvent
</wsa:Action>
<wsa:MessageID>uuid:ab4c4001-f089-721c-aae6-f51ec37d3501</wsa:MessageID>
<wsa:To>http://www.w3.org/2005/08/addressing/anonymous</wsa:To>
<wsa:RelatesTo>uuid:de9a7007-f056-431c-aae6-f51ec37d3488</wsa:RelatesTo>
</soap:Header>
<soap:Body>
…
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我的服务使用自定义wcf绑定,如下所示:
var binding = new CustomBinding();
binding.Elements.Add( new TextMessageEncodingBindingElement() { MessageVersion = MessageVersion.Soap12WSAddressing10 } );
binding.Elements.Add( new HttpTransportBindingElement() );
Run Code Online (Sandbox Code Playgroud)
要在我的响应中添加自定义soap标头,我使用的是IDispatchMessageInspector,它看起来如下所示:
public void BeforeSendReply(ref Message reply, object correlationState)
{
reply.Headers.Add(new StandardHeaderResponse());
}
Run Code Online (Sandbox Code Playgroud)
和MessageHeader如下:
[MessageContract]
public class StandardHeaderResponse : MessageHeader
{
#region Overrides of MessageHeaderInfo
public override string Name
{
get { return GetType().Name; …
Run Code Online (Sandbox Code Playgroud)