db 연결이 필요해서 비즈니스랑 데이터엑세스 레이어 객체들을 자체적으로 싱글톤 인스턴스로 만들어서 뷰모델에 생성자 매개변수로 넣어 쓰려고 했더니 스택오버플로가 생기더군요
중단점 찍어보니 객체를 계속해서 생성하고 있었습니다.
찾아보니 싱글톤 관리는 di 라이브러리에서만 담당을 하늠 프레임워크인데, di를 하려면 별도의 라이브러리를 추가설치해야 했습니다.
첫째로 궁금한건 왜 스택오버플로가 발생했는지,
그리고 두번째는 왜 di를 하려면 다소 불편하게도 라이브러리를 설치하도록 구성했는지 궁금하더라구요.
감사합니다
싱글톤을 굳이 라이브러리로 쓰는 이유가 뭐임
말씀드렸다시피 자체적으로 ioc 컨테이너에 싱글톤 만들어 사용하려하니 스택오버플로로 뻑이 납니다. 방법 검색해보면 다들 iservicecontainer에서 등록해서 쓰시더군요
웃기네 어떻게해야 스택오버플로가 뜨냐 주입할때 재귀호출함?
아니면 정의내릴때 의존성사이클링되는거 아님?
순환참조라고 생각하는데, 아직 wpf를 잘 몰라서 프로토타입 만들면서 여기저기서 코드 기워놓고 있습니다.
di 라이브러리가 뭔데
microsoft.extensions.dependancyinjection 라이브러리입니다
컨터이너에 등록할떄 자체기능으로 싱글톤으로 등록 기능 있을텐데 그거쓰셈 contianer.등록(ins, Scope.Instance) 수두 코드임
싱글톤 인스턴스로 만들어서 뷰모델에 생성자 매개변수로 넣어 쓰려고 했더니 << 이부분 님이 코드 잘못짰을확률 999% - dc App
님 코드를 보여줘 - dc App
보여드릴 코드랄게.. public sealed class Singleton { private volatile static Singleton _instance; public static Singlyon Instance{대충 겟. 겟에는 락.} // 필드 }
public class MainViewModel { private IDataService _service = new Singleton.Instance.Service; //코드 } 대강 이런 형태였습니다
겟 안에서 Instance 접근하는건없음? - dc App
new Singleton.Instance.Service 이건 오타지? - dc App
넵 오타네요
스택오버플로 날부분이 프로퍼티 겟 부분밖에 안보임 - dc App
겟 안에서 당근 인스턴스 접근해서 데이터 가져오고 있습니다. 지금 제 생각에는 xaml이 개판이라 그런거같기도 합니다..
Instance 는 절대 접근하면안되고 _instance 를 접근해야지 - dc App
아니면 비주얼 스튜디오로 중단점 걸린후에 F10 F11 눌러서 한단계씩 코드흐름 따라가보셈요 아님 예외터질때 StackTrace 도 볼수있잖아요 그거보고 어디서 스택터지는지 확인하면됨 - dc App
그게.. 겟 접근도 _instance로 하고 있어서.. ㅠ 전에 작업할 때는 같은 구조로 잘 작동했던지라 아마 제가 xaml 신경 안쓰고 기워 붙이다가 터졌는지 의심중입니다
app : application 에서는 잘 작동해요. 그래서 프레임워크 자체에서 싱글톤 지원 안하는건가? 라고 생각했었는데 xaml에서 순환참조되어도 문제일 수 있다고 하는걸 방금 알았습니다.
바보님아 ioc 컨테이너를 쓰는데 자체 싱글톤을 왜구현해 컨테이너 내에서 싱글톤으로 등록이 가능한데