2017-10-17 10 views
1

이전의 asp.net 웹 양식 페이지로 작업하고 DI를 작동 시키려고했지만 일부 오브젝트가 생성되지 않아서 문제가 발생하여 코드에서 지연 구현을 목표로합니다. .SimpleInjector 게으른 일반 등록

나는이 웹 사이트의 나머지 부분에서 작업 다음 등록 :

container.Register(typeof(IDataFactory<,>), new[] { typeof(SqlAccountFactory).Assembly }); 

내가

container.Register<Lazy<IDataFactory<SqlAccountFactory, int>>>(
      () => new Lazy<IDataFactory<SqlAccountFactory, int>>(
       container.GetInstance<IDataFactory<SqlAccountFactory, int>>)); 

을 시도 게으른 측면을 얻으려면

이것의 결과는 속성을하지 않는다는 것입니다 채워진다. 페이지의 코드 숨김에서

부동산 (게으른를 사용하지 않을 때이 전술 한 바와 같이 작동) : 코드 비하인드의 속성을 채우는 나는 문서의 코드를 사용하고 참고로

[Dependency] 
public Lazy<IDataFactory<SqlAccountFactory, int>> ProjectCodesRepository; 

이 속성으로 표시하고 모든 위의 게으른 등록은 잘 작동합니다.

아무도 내가 할 수있는 바보 같은 것을 도울 수 없습니까?

답변

1

간단한 인젝터의 IPropertySelectionBehavior은 속성에서만 작동합니다. 그러나 당신이 정의한 것은 공공 분야이지 재산이 아닙니다. 다음으로 변경하면, 아마 작업을 시작합니다 :

[Dependency] 
public Lazy<IDataFactory<SqlAccountFactory, int>> ProjectCodesRepository { get; set; } 

그것은 단지 속성을 지원하는 등의 방법으로 DependencyAttribute을 표시하는 것이 현명있는 AttributeUsageAttribute로 표시하여 다음과 같이

[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)] 
public sealed class DependencyAttribute : Attribute { } 

이렇게하면 필드에 특성을 넣을 때 C# 컴파일러에서 컴파일 오류가 표시됩니다.

길게 짧으면 의존성이 게으르다는 것과 아무 관계가 없습니다.

+0

내 문제가 해결되어 등록을 수정하려고하는 속성이 잘못되었습니다. AttributeUsage를 추가하면 나중에이를 막을 수 있습니다. 감사! –

+0

의존성이'Lazy '인 것은 일반적으로 좋지 않습니다. ctors는 종속성을 저장하는 것 이상의 작업을 수행 할 수 없기 때문에 객체 생성은 정말로 빠릅니다. – Steven