[seasar-dotnet:1281] Dxoを使用する際にあるメソッドへのDatePatternAttribute の指定が、指定されていないメソッドに影響する
Nobutaka Ishimori
[E-MAIL ADDRESS DELETED]
2009年 3月 26日 (木) 17:55:54 JST
お世話になっております、石守と申します。
Seasar.NetのDXOでDatePatternAtributeを使用する際に、
不具合と考えられる問題に遭遇いたしましたので、報告いたします。
あるメソッドへのDatePatternAttribute の指定が
指定されていないメソッドに影響します。
末尾に再現コードを添えておりますので、ご確認ください。
[問題となる現象]
DatePatternAttributeのついたDXOのメソッドを実行した後、
DatePatternAttributeのついていないDXOのメソッドを実行した際に、
直近に実行したDatePatternAttributeのついたDXOのメソッドの
DatePatternAttributeの内容で処理が実行されます。
・再現コードの実行結果
Original Value : 2009/04/10 0:00:00
Converted Without DatePattern: 2009/04/10 0:00:00
Converted With DatePattern : 20090410
Converted Without DatePattern: 20090410
[期待する結果]
他のメソッドのDatePatternAttributeの影響をうけない
・再現コードの期待する実行結果
Original Value : 2009/04/10 0:00:00
Converted Without DatePattern: 2009/04/10 0:00:00
Converted With DatePattern : 20090410
Converted Without DatePattern: 2009/04/10 0:00:00
[環境]
Visual C# 2005
Seasar.Net 1.3.14
以上、よろしくお願いいたします。
--
Program.cs
--
using System;
using System.Collections.Generic;
using System.Text;
using Seasar.Quill;
using Seasar.Quill.Attrs;
using Seasar.Dxo.Interceptor;
using Seasar.Dxo.Annotation;
namespace DateFormatLeak
{
class Program
{
static void Main(string[] args)
{
DateFormatLeakDxo dxo =
QuillInjector.GetInstance().Container.GetComponent(typeof(DateFormatLeakDxo))
.GetComponentObject(typeof(DateFormatLeakDxo)) as
DateFormatLeakDxo;
DateValueDateTime dateTimeValue = new DateValueDateTime();
dateTimeValue.DateValue = new DateTime(2009, 04, 10);
// 2009/04/10 0:00:00 と出力
Console.WriteLine(string.Format("Original Value
: {0}", dateTimeValue.DateValue.ToString()));
DateValueString stringValue;
stringValue = dxo.ConvertWithoutDatePattern(dateTimeValue);
// 2009/04/10 0:00:00 と出力
Console.WriteLine(string.Format("Converted Without
DatePattern: {0}", stringValue.DateValue));
// 20090410 と指定
stringValue = dxo.ConvertWithDatePattern(dateTimeValue);
Console.WriteLine(string.Format("Converted With
DatePattern : {0}", stringValue.DateValue));
stringValue = dxo.ConvertWithoutDatePattern(dateTimeValue);
// 20090410 になる
Console.WriteLine(string.Format("Converted Without
DatePattern: {0}", stringValue.DateValue));
Console.Write("終了するには 'Enter' を押してください");
Console.ReadLine();
}
}
/// <summary>
/// Dxoクラス
/// </summary>
[Aspect(typeof(DxoInterceptor))]
[Implementation]
public interface DateFormatLeakDxo
{
/// <summary>
/// DatePatternなしの変換
/// </summary>
/// <param name="dateTime">日付</param>
/// <returns>日付の文字列</returns>
DateValueString ConvertWithoutDatePattern(DateValueDateTime dateTime);
/// <summary>
/// DatePatternありの変換
/// </summary>
/// <param name="dateTime">日付</param>
/// <returns>日付の文字列</returns>
[DatePattern("yyyyMMdd")]
DateValueString ConvertWithDatePattern(DateValueDateTime dateTime);
}
/// <summary>
/// 日付を文字列でもつ
/// </summary>
public class DateValueString
{
private string dateValue;
/// <summary>
/// 日付文字列
/// </summary>
public string DateValue
{
get { return dateValue; }
set { dateValue = value; }
}
}
/// <summary>
/// 日付をDateTimeでもつ
/// </summary>
public class DateValueDateTime
{
private DateTime dateValue;
/// <summary>
/// 日付文字列
/// </summary>
public DateTime DateValue
{
get { return dateValue; }
set { dateValue = value; }
}
}
}
--
石守伸崇
[E-MAIL ADDRESS DELETED]
seasar-dotnet メーリングリストの案内