/// <summary> /// 싱글톤 하나만 있는 클래스들을 모아놓은 컨테이너 /// </summary> public class SingleContainer { private SingleContainer() { } private static readonly Lazy<SingleContainer> _instance = new Lazy<SingleContainer>(() => new SingleContainer()); public static SingleContainer Instance => _instance.Value; //내부 딕셔너리 private readonly ConcurrentDictionary<Type, object> _objes = new ConcurrentDictionary<Type, object>(); //등록 public void Register<T>(T target_obj) where T : class { _objes[typeof(T)] = target_obj; } //Get (가져오기) public T GetObj<T>() where T : class { return _objes.TryGetValue(typeof(T), out var target_obj) ? target_obj as T : null; } //해당클래스가 들어있는지 여부 public bool IsContains<T>() where T : class { return _objes.ContainsKey(typeof(T)); } //해당클래스 삭제 public void RemoveObj<T>() where T : class { _objes.TryRemove(typeof(T), out _); } }
김반장의 블로그
it블로그
2025년 6월 15일 일요일
c# 싱글컨테이너
2025년 5월 19일 월요일
2025년 3월 4일 화요일
findstr 쓰기오류 해결방법
로그폴더안의 로그파일들에서 특정단어를 명령프롬프트로 찾을때
findstr 명령을 사용한다. 그런데 이때 그 로그파일들이 UTF-8등으로
findstr 사용할때 인코딩 문제 때문에 FINDSTR: 쓰기 오류 입니다.
라는 내용이 나오면서 더이상 진행이 안되는 경우가 있다.
이때는 명령창에서 문자표시 방식을 UTF-8로 바꾼후 findstr 명령을 수행하고
다시 949로 돌리면 됨
바꾸는 명령어 -> chcp 65001
돌리는 명령어 -> chcp 949
음... 이거는 findstr 프로그램 내부에서 해결할수 있는 문제 같은데
해결을 안해주는것 같다.. 오류를 내지말고 현재인코딩으로 찾을수 없다고
표시를 해주면 될것 같은데 말이다.
2025년 3월 3일 월요일
라즈베리파이에 디지털 사이니지 입히기
라즈베리파이에 디지털 전광판 만들기..
뭐.. 음.. 그냥 파이썬 프로그램으로 미디어를 일정시간 돌게 만들수도 있지만
다른 사람이 해놓은 그럴듯한 프로그램이 있고 오픈소스라면 나보다 좀 더
전문성이 있을 테니까.. 그걸 그냥 입히면 된다.. (뻘짓 금지 & 오류나면 귀찮음)
일단 라즈베리파이에다가 별도 이미지를 입히고 거기서 미디어의 노출옵션을
웹으로 제어하는 방식을 채택하는 시스템인것 같다.
이름은 Screenly 이다.
깃허브: https://github.com/Screenly/Anthias/releases
고고싱
참고: https://yjhtpi.tistory.com/193
2025년 2월 24일 월요일
c# 클래스 멤버 출력
c#으로 작업할때 VO클래스 멤버 필드와 프로퍼티를 출력 해야할일이 있다.
이때는 Reflection을 이용해서 출력하면 되는데 하나하나 하기 귀찮으면
MemberPrintAble 클래스를 만들어서 상속시키면 된다.
public abstract class MemberPrintAble{ public string MemberString() { FieldInfo[] fieldInfos = this.GetType().GetFields(); PropertyInfo[] propertyInfos = this.GetType().GetProperties(); // var sb = new StringBuilder(); foreach (var ffo in fieldInfos) { var value = ffo.GetValue(this) ?? "(빈값)"; sb.AppendLine(ffo.Name + ": " + value.ToString()); } foreach (var info in propertyInfos) { var value = info.GetValue(this, null) ?? "(빈값)"; sb.AppendLine(info.Name + ": " + value.ToString()); } return sb.ToString(); }}
요로코롬 정의해놓고 MemberPrintAble클래스를 상속하고
사용할때 MemberString 메서드를 호출하면
멤버필드와 프로퍼티값을 출력할수 있다.
ToString으로 override해서 언제하고 있뉘??
2025년 2월 10일 월요일
c# dynamic 변수에 배열 추가하기
dynamic classRoom = new { StudentCount = 15, Location = "2F1B", TeacherName = "김선생", Students = student_list.Select(p => new { p.StudentNo, p.StudentName, p.Gender }).ToArray(),};
2025년 1월 21일 화요일
asp.net으로 custom 인증처리 만들기
[AttributeUsage(AttributeTargets.Method)] public class CheckCustomToken : Attribute, IAuthorizationFilter { public CheckCustomToken() { } // public void OnAuthorization(AuthorizationFilterContext context) { // StringValues sv_authToken = ""; context.HttpContext.Request.Headers.TryGetValue("Authorization", out sv_authToken); string str_authToken = sv_authToken.FirstOrDefault(); // str_authToken 가지고 어쩌고 저쩌고 bool bChk_auth = 췍췍(str_authToken); if (!bChk_auth) { context.Result = new UnauthorizedObjectResult("Invalid Token" ); return; } } }
[HttpPost][CheckCustomToken]public async Task<IActionResult> gogosing(){ Ok();}