본문 바로가기

프로그래밍/C#32

[디자인패턴]- State 패턴 STATE 패턴 STATE 패턴이란? 객체의 상태에 따라 객체의 행위가 달라 질 때 사용 상태별 행위를 별도의 클래스에서 구현함으로써 코드 분리가 가능, 새로운 상태를 유연하게 추가 확장 할 수 있음 if/else 블럭으로 구현하는것보다 state 패턴을 사용하여 각 상태별로 구현하는것이 효율적일 수 있음 사용 예 , CODE internal class Program { static void Main(string[] args) { var testPlayer = new TestPlayer(); testPlayer.ChangeState(new LoginState()); Console.ReadLine(); } } Main.cs public class TestPlayer { public PlayerState P.. 2023. 3. 14.
[C#] DateTime값 Serialization/Deserialization시 DateTime.Minvalue 수치 변하는 현상. 문제 ServiceStack을 사용하여 object를 json으로 serialization / deserialization 하면서 사용중인데, 분명히 DataTime.MinValue로 초기화(0001-01-01 00:00:00) 하여 저장한 변수인데, ToJson() 후 파싱하면 출력되는 값이 0001-01-01 09:00:00 으로 변경 되어 출력되는 문제가 있었다. 찾아보니 "The TimeZone when serializing into a DateFormat that includes the TimeZone is the local timezone of the computer serializing the date. " "TimeZone을 포함하는 DateFormat으로 직렬화할 때 TimeZone은 날.. 2022. 12. 16.
apple client secret 생성을 위한 jwt 만들기 nuget 설치 JWT 설치 Install-Package JWT -Version 10.0.0-beta5 System.IdentityModel.Tokens.Jwt 설치 Install-Package System.IdentityModel.Tokens.Jwt -Version 6.21.0 설명 apn 인증용 p8코드를 미리 발급받아 준비한다. 준비한 p8을 읽어 앞 뒤의 "private key" 키워드 삭제 줄바꿈을 공백으로 변경 준비된 p8데이터를 MakeToken 함수에 넣음. CODE // p8데이터 읽음 var p8Data = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "\\p8data.p8"); Console.WriteLine(p8Data); /.. 2022. 7. 12.
[vs] visualstudio community 버전업시 발생하는 에러. [에러 내용] C#Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VisualStuio\v16.0\Web\Microsoft.Web.Publishing.Task.dll 어셈블리에서 "TransformXml" 작업을 로드 할 수 없습니다. 파일이나 어셈블리'file:///C#Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VisualStuio\v16.0\Web\Microsoft.Web.Publishing.Task.dll' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 지정된 파일을 찾을 수 없습니다. 선언이 올바른지, 어셈.. 2022. 3. 30.
[C#] Nested transactions are not supported. mysql + dapper를 사용하는데 위의 에러를 만났다. 에러 내용은 "중첩된 트랜잭션은 지원하지 않는다" 인데 해당 코드를 가서 보니까 using(var tran = new TransactionScope()) { 1. 특정 조건에만 트랜잭션을 사용하는 AADB를 open함 2. 언제나 BBDB를 트랜잭션 사용 없이 open함 } 이렇게 되어 있었다. 이미 밖에서 TransactionScope를 사용하기때문에 AADB의 트랜잭션을 사용할 필요가 없었던것. 그래서 AADB open시 using(var db = new AADBConnector()) { } 방식으로 수정했다. 2021. 6. 7.
[C#] localIP / public IP 가져오기 localIP, publicIP 가져오기 ▶ 서버를 개발하다보면 localhost나 127.0.0.1 외에 IP 주소가 필요한 경우가 있다. ▶ 그때 매번 cmd창 켜서 ipconfig 검색하고, "내 아이피검색" 안해도 아래 코드를 사용하면 편하게 PC의 IP를 가져 올 수 있다. LocalIP 가져오기 public static string GetLocalIP() { string result = string.Empty; var host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { result = ip.ToStrin.. 2021. 3. 23.
[C#] 파일 압축하기 파일 압축하기 코드 class Program { static void Main(string[] args) { Console.WriteLine("== Hello World =="); try { // 1. 압축할 폴더 생성 var directoryName = @"D:\ZipTest\" + "NewZip"; System.IO.Directory.CreateDirectory(directoryName); // 복사할 파일 이름 var fileList = new List { "testfile1.txt", "testfile2.txt" }; foreach (var fileName in fileList) { // 원본 파일 위치 var sourceFile = System.IO.Path.Combine(@"D:\ZipTest.. 2020. 12. 21.
[C#] MD5 암호화 string GetMD5Hash(string password) { var mdHash = MD5.Create(); var data = mdHash.ComputeHash(Encoding.UTF8.GetBytes(password)); var stringBuilder = new StringBuilder(); for (int i = 0; i < data.Length; i++) { stringBuilder.Append(data[i].ToString("x2")); } return stringBuilder.ToString(); } 2020. 9. 3.
Dapper 사용시 key/explicitKey Dapper를 사용할 때 insert시 pk를 자동으로 채워주려면 해당 변수를 [Key] 로 해줘야함 ex) public class ItemEntity { [Key] public long ItemIdx {get;set;} public long InsertToDB() { conn.Insert(this); return ItemIdx; } } - explicitKey키로 어트리뷰트를 하면 위의 방법은 적용되지 않음 [추가 + ] [key] : "데이터베이스에서 자동으로 생성되는 키로 속성 지정"으로 정의 ( Auto Increment) [Explicti Key] : 키는 키인데 자동 증가 하지 않는 컬럼 https://stackoverflow.com/questions/49428967/dappers-explic.. 2020. 1. 3.
반응형