질문
제너릭 T를 인스턴스하고 싶습니다.
정확히는 IoC로 …
public class MainViewModel<TSampleViewModel> : BaseViewModel
where TSampleViewModel : SampleViewModel
{
public TSampleViewModel SampleMethod(string id, string name)
{
var sample = ?????? TSampleViewModel { Id = id, Name = name }; // <= 막히는 부분 입니다.
// var sample = Mvx.IoCProvider.IoCConstruct<TSampleViewModel>(new[] { id, name });
// 원하는 기대 값은 위에 코드와 같이 <T>를 new 생성하는 방법 입니다.
return sample;
}
}
// 1. new () 추가 없이 구현하는 방식이 궁금합니다.
// 이유는 new ()를 추가하면 상속 받는 클래스를 수정하고 수정하는 문제가 발생합니다.
// 2. 가능하면 IoC로 관리 가능한 상태면 좋겠습니다.
// 3. MvvmCross IoCConstruct를 MAUI에서 사용하는 컨테이너에 맞게 구현 할 수 있을까요?
/* public class MainViewModel<TSampleViewModel> : BaseViewModel
where TSampleViewModel : SampleViewModel, new ()
{
public TSampleViewModel SampleMethod(string id, string name)
{
var sample = new TSampleViewModel { Id = id, Name = name };
return sample;
}
}
*/
public class SampleViewModel : BaseViewModel
{
public string Id { get; set; }
public string Name { get; set; }
}
-
- new () 추가 없이 구현하는 방식이 궁금합니다.
CS0310 : 매개 변수가 없는 public 비추상 유형이어야 합니다. 이 발생합니다.
- new () 추가 없이 구현하는 방식이 궁금합니다.
-
- 가능하면 IoC로 관리 가능한 상태면 좋겠습니다.
-
- MvvmCross IoCConstruct를 MAUI에서 사용하는 컨테이너에 맞게 구현 할 수 있을까요?
샘플 링크
- 2023.09.19 - 14:10 :
new ()
예제 추가 되었습니다.
2023.09.19 - 14:10 업데이트
보충 및 질문 답변
정확하게 아는 부분이 아니라서;;;
-
아주 높은 비율로 C# Q&A가 맞습니다. 제목 및 카테고리 수정합니다.
-
Mvx.IoCConstruct
는<T>
로 들어오는 값을Type
에 맞게 인자와 같이 생성하는데 있습니다.
<T>
에는 여러Type
이 들어올 수 있으며 그Type
을 설정 및 관리 책임을IoC
에게 넘기는 것이 핵심입니다. 그러면 생명주기 관리도 같이 따라오는 것이 장점입니다. -
new ()
문제점- CS0310 : 매개 변수가 없는 public 비추상 유형이어야 합니다.
왜
new()
를 쓰지 말아야 하나요?
- Sample 업데이트 완료
new ()
예제 추가 되었습니다.