0

timer_elapsed イベントで datacontext オブジェクトを接続/使用する最良の方法を教えてください。初めて完全に実行される timer_elapsed 内に datacontext オブジェクトがありますが、以降の timer_elapsed イベントの呼び出しでは何もしません。スレッドプール スレッドで経過イベントが呼び出されるたびに、新しいインスタンスが作成されることを理解しています。この動作を制御するには、または少なくともコードを一貫して実行するにはどうすればよいですか。ありがとう。

これは私の構造マップ設定です

ForRequestedType<BulkSMSDataContext>()
            .TheDefaultIs(() => new BulkSMSDataContext())
            .CacheBy(InstanceScope.Hybrid);

これは私のタイマーの実装です

void _timerSendScheduledMessages_Elapsed(object sender, ElapsedEventArgs e)
    {
        DateTime currentUTC = DateTime.UtcNow.AddSeconds(-DateTime.UtcNow.Second).AddMilliseconds(-DateTime.UtcNow.Millisecond);

        var msgToSend = from c in _messageRepository.GetMessages(MessageTypes.Scheduled)
                        where c.Time == currentUTC
                        select c;


        foreach (var msg in msgToSend)
        {
            int scheduledMsgID = msg.MessageID;
            Response res = _messageService.Send(msg);
            _messageRepository.DeleteScheduledMessage(scheduledMsgID);
        }
    }
4

1 に答える 1

0

スコープをより適切に制御するために、データコンテキストを _messageRepository に渡すと仮定して、呼び出されるたびに経過イベントを変更して新しい _messageRepository を作成します。次に、構造マップにデータコンテキストを注入させます。

そうしないと、作業単位が不十分に定義されてしまい、現在のようなスコープの問題が発生する傾向があります。

ただし、実装を見ないと、正確に伝えるのは困難です。

于 2012-07-13T08:10:53.927 に答える