4

잠시 동안 의존성 주입 프레임 워크로 사용했던 Ninject와 함께 작동하도록 가로 채기를 설정하려고합니다.Ninject 차단 동적 프록시 문제

NuGet에서 가로 채기 확장을 다운로드하고 Castle Dynamicproxy 구현과 LinFu 구현을 모두 시도했지만 응용 프로그램을 사용할 수 없습니다.

매개 변수가없는 생성자가없는 클래스에서 프록시를 만들 때 Castle이 오류를 발생했습니다. 모든 서비스 개체에는 생성자를 통해 종속성이 삽입 되었기 때문에 문제입니다. 오류 :

System.ArgumentException : 클래스의 프록시를 인스턴스화 할 수 없습니다 : emedia.RapidSystems.Subscriber.Presenters.RRSubmissionPresenter. 매개 변수없는 생성자를 찾을 수 없습니다. 매개 변수 이름 :

System.ArgumentException : 코드는 일반적인 매개 변수 방법을 호출 할 때까지 constructorArguments

LinFu 인터셉터

그런 다음 다음 나에게 준 바로, 더 나은 일 일반 유형이 유효하지 않습니다. 매개 변수 이름 : 여기 methodInfo

내가 차단하려고 클래스 중 하나에 대한 단순화 된 버전 코드 :

[LogCalls] 
public class Repository<T> : IRepository<T> 
     where T : class 
{ 
    public virtual T GetEntity<TKey>(ObjectContext context, TKey key) 
    { 
     var entity = GetEntity(context, key, _emptyLoadingStrategy); 
     return entity; 
    } 

    public virtual IQueryable<T> GetAll(ObjectContext context) 
    { 
     var query = GetAll(context, _emptyLoadingStrategy); 
     return query; 
    } 

    public virtual T Add(ObjectContext context, T entity) 
    { 
     context.AddObject(EntitySetName(context), entity); 
     return entity; 
    } 

    //other code goes here 

} 

추가 및 GETALL는 잘 작동하지만 오류가 GetEntity가 프록시에 호출 될 때 발생합니다.

요즘에는 코드 기반으로 인터셉터가 작동하지 않기 때문에 막혔습니다. 누구나 Ninject 인터셉터를 단순한 데모 클래스가 아닌 실제 복잡한 프로덕션 시스템으로 작업 했습니까? 그렇다면 어떻게해야합니까? 나는 그것이 작동하는 한 내가 사용하는 인터셉터를 신경 쓰지 않는다.

아직 충분히 성숙하지 않은 Ninject의 차단 기능이 있습니다. 전체를 Unity와 같은 다른 것으로 교체해야합니까?

답변

3

버전 3.0.0-rc2를 사용하십시오. 그것은 동적 프록시에 인터페이스 프록시에 대한 지원을 추가합니다

+2

NuGet에서 전혀 실행되지 않고 "메소드를 찾을 수 없습니다 : 'System.Delegate System.Reflection.MethodInfo.CreateDelegate (System.Type) '. " 어쨌든 프로덕션 환경에서 시험판 버전을 사용할 수 없으므로 답변이 아직 성숙하지 않았으므로 버전 3이 실제로 출시 될 때까지 기다려야합니다. – Mant101