小编Rag*_*ghu的帖子

Ninject InRequestScope缺失

关于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)

只是想知道是否:

  1. 如果它的行为与InRequestScopeMethod 完全相同.
  2. 它将保证当我HTTContext.Current的GC被用时,底层DataCotext也将被处理掉.

c# binding ninject ninject-2

34
推荐指数
3
解决办法
7521
查看次数

c#Mocking具有Moq的具体类的接口成员

我有一个接口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)

c# interface class moq concrete

10
推荐指数
1
解决办法
5980
查看次数

c#Math.Sqrt实现

我最近一直在使用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实现.

干杯

.net c# math frameworks

10
推荐指数
1
解决办法
8690
查看次数

如何模拟SerialDataReceivedEventArgs

我有一个外围驱动程序,它使用串行端口与外围设备通信.我想对这个驱动程序进行单元测试,并试图模拟串口.因此,我为框架类型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?

c# unit-testing mstest moq

6
推荐指数
1
解决办法
3223
查看次数

C#Linq Char数组除外() - 奇怪的行为

我无法理解为什么这个测试会因消息"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)

c# linq

6
推荐指数
2
解决办法
968
查看次数

c#同时执行2个线程

我试图在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)

c# asp.net multithreading httphandler

4
推荐指数
1
解决办法
9955
查看次数

如何在WCF服务响应中正确实现自定义soap 1.2标头和WS-Addressing

我是一名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)

c# wcf soap

2
推荐指数
1
解决办法
5724
查看次数