완전히 싱글 톤 응용 프로그램 (웹 및 콘솔)을 만들려고합니다. 하지만 Entity DbContext는 웹에서 PerWebRequest를 사용해야합니다.모든 클래스가있는 DryIoc WebRequest로 Singleton 및 DbContext
이것을 지원하려면 컨테이너에 어떻게 등록해야합니까? 일단 클래스가 싱글 톤으로 초기화되면, 나는 싱글 톤으로 모든 주입 된 클래스를 가진 메모리상의 단일 인스턴스에서 실행될 것임을 이해합니다.
다음 코드는 모든 웹 응용 프로그램 및 콘솔 응용 프로그램에 대한 컨테이너 초기화입니다. - 콘솔에서 실행할 때 어떻게 등록해야합니까? - Web에서 실행 중일 때 Owin이 시작 작업을 호출 할 때가끔 인증에서 사용할 객체를 확인해야하지만 Owin은 "컨텍스트 없음"환경에서 실행됩니다. 어떻게 탐지하고 사용합니까? 당신이 주변 범위 컨텍스트를 사용하는 것처럼
private static IContainer Initialize(IContainer container)
{
if (container == null)
container = new Container(
rules => rules
.WithDefaultReuseInsteadOfTransient(Reuse.InWebRequest)
.WithFactorySelector(Rules.SelectLastRegisteredFactory())
.With(FactoryMethod.ConstructorWithResolvableArguments)
.WithoutThrowOnRegisteringDisposableTransient(),
scopeContext: new AsyncExecutionFlowScopeContext()
);
string prefix = GetPrefix();
var implementingClasses =
AppDomain.CurrentDomain.GetAssemblies().ToList()
.Where(x => x.FullName.StartsWith(prefix))
.SelectMany(x => x.GetTypes())
.Where(type =>
(type.Namespace != null && type.Namespace.StartsWith(prefix)) &&
type.IsPublic && // get public types
!type.IsAbstract && // which are not interfaces nor abstract
type.GetInterfaces().Length != 0); // which implementing some interface(s)
Parallel.ForEach(implementingClasses, implementingClass =>
{
container.RegisterMany(new[] { implementingClass }, Reuse.Singleton, serviceTypeCondition: type => type.IsInterface);
});
return container;
}
이 샘플과 같은 일반 등록 방법을 만드는 방법에 대한 예가 있습니까? ' 공용 static IContainer를 RegisterWebRequest (이 IContainer를 용기) { container.Register , Func을 > (재사용 : Reuse.InWebRequest 만들었다 : Made.Of (() => 새로운 T()) ifAlreadyRegistered : IfAlreadyRegistered.Replace); 반품 용기; ' –
lcmassena
제 마지막 코멘트를 무시하십시오. 귀하의 bitbucket에서 문제를 만들었습니다 : https://bitbucket.org/dadhi/dryioc/issues/378/resolve-a-single-instance-inwebrequest – lcmassena