2014-05-13 3 views
0

질문 배경 : 내가 만드는 오전 일부 폴더의 이름을 무작위로 생성 된 번호를 추가 할 필요가 - - 두 개의 클래스에서 사용정적 '무작위'싱글 톤 인스턴스를 올바르게 공유하는 방법?

나는 현재 내 코드에서 '랜덤'숫자 인스턴스의 몇 가지있다. 이 경우 파일을 새 폴더에 매핑하면 작업이 즉시 완료됩니다.

코드 :

내가 언급 한 각 클래스에 다음 코드 두 개인 정적 인스턴스가 있습니다

private static randomNo = new Random((int)DateTime.Now.Ticks); 

싱글을? 또는 두 개의 정적 인스턴스? :

지금까지 중복 문제가 없었습니다. 나는 여전히 전체 솔루션에서 단일 정적 난수 객체 인스턴스를 공유하기 위해 싱글 톤을 개발해야한다고 생각한다.

IoC (Unity)를 사용하여 모든 클래스를 만들고 정적 랜덤 인스턴스를 처리하는 방법을 모르십니까? 내가 필요로하는 각 클래스에서 싱글 톤 클래스를 '새로'사용할 수 있습니까? 아니면 정적 임의 인스턴스가 다시 설정됩니까? 하나의 싱글 톤 클래스를 생성하고 임의로 생성 된 클래스를 필요로하는 클래스간에 전달해야합니까?

새 폴더 이름을 임의의 숫자로 추가 할 때 그 이름이 이미 존재하지 않는지 확인하기 위해 확인을해야한다는 것을 언급해야합니다.

+1

잠재적 인 문제는 분명하지 않습니다. 당신은 복제에 대해 이야기합니다. 다른 발전기가 동일한 번호를 생성 할 수 있다는 것을 의미합니까? 하나의 단일 발전기는 같은 번호를 두 번 연속 생성 할 수도 있습니다. – GolezTrol

+0

@GolezTrol 내가 아는 것이 내가 지금 가지고있는 것처럼 두 개의 개인 정적 변수를 사용할 수 있겠는가? 또는 싱글 톤을 구현하는 것이 가장 좋습니다. 클래스간에 단일 Singleton 인스턴스를 전달해야하는지 궁금합니다. – user1352057

+1

싱글 톤도 함께 전달할 수 있습니다. 장점은 응용 프로그램이 싱글 톤이라는 사실에 크게 의존하지 않는다는 것입니다.응용 프로그램의 모든 곳에서 싱글 톤을 호출하면 리팩터링하는 것이 더 많은 작업이 될 것입니다. 다른 한편으로, 언제 당신이 그것을 바꿀 필요가 있고 얼마나 많은 전화가있을 것인가 ... – GolezTrol

답변

1

응용 프로그램 전체에 걸쳐 단 일치 Random을 엄격하게 사용할 필요는 없습니다. 하나 이상의 인스턴스를 사용하는 대부분의 경우 (이 경우 포함)는 "이론적 정확성"보다 편리한 편의성을 나타내는 기호이지만, 서로 다른 프로그램 구성 요소가 디자인에 따라 서로 다른 RNG를 사용하여 합법적 인 경우가 있으므로 합법적 인 경우가 있습니다. 프로그램의 수명은 결정적입니다.

당신은 당신이 같은 인스턴스와 Random 개체에 대한 모든 요청을 만족해야 컨테이너를 지시하는 RegisterType를 사용해야 싱글 인스턴스로 이동하려면

는 :

container.RegisterType<Random>(new ContainerControlledLifetimeManager()); 

이것은 Random 인스턴스를 생성하지 않습니다 그 자리에서; 대신, 컨테이너에 지시하여 Random에 대한 요청이 해결되면 후속 요청은 동일한 인스턴스로 해결됩니다.

그런 다음 으로 싱글 톤 인스턴스를 해결하거나 컨테이너에 종속성을 보이게하여 RNG 인스턴스 중 하나를 해결하도록 지시 할 때 RNG 인스턴스를 자동으로 확인하고 삽입 할 수 있습니다.

+0

한 방향 또는 다른 방향으로 돌보아 야 할 강력한 이유가 없다면 코드 주위에 1 개 또는 10 개의 RNG 변수가 떠 다니면 아무런 차이가 없어야합니다. Afterall, 그들은 모두 균일하게 무작위로 분포하는 난수를 생성합니다. 유지 관리 가능성에 가장 좋은 점이 무엇인지, 길을 잃지 않을 것입니다. –

관련 문제