마침내 IoC 및 기타 패턴을 학습하는 과정을 밟았으며 어셈블리 목록을 기반으로 개방형 제네릭을 등록하려고 할 때 문제가 발생했습니다. 별도의 클래스 라이브러리에 프레임 워크의 핵심을 구축하고 프레임 워크에서 상속하는 테스트 클래스를 선언하는 일련의 테스트 프로젝트가 있습니다.간단한 인젝터 및 어셈블리 스캐닝
문제는 그 ICommandHandler<>
개방 일반적인 아무것도 찾을 실패 있도록 AddPersonCommandHandler : ICommandHandler<AddPersonCommand>
런타임에로드되지 않으며 framework.test.service DLL을. 사전에 AddPersonCommandHandler
인스턴스를 만들어야합니다. 그런 다음 목록에 추가 어셈블리가 하나만 있으면 작동합니다.
로드를 강제하는 간단한 방법이 있습니까?
=========== 편집 : 이것은 앱 도메인과 다른 어셈블리에 대한 참조를 보유하고있는 단위 테스트 프로젝트의 와이어 업 코드입니다.
public Container SetupIoc()
{
var container = new Container();
container.Register(typeof(IUnitOfWork), typeof(EntityFrameworkUnitOfWork), Lifestyle.Singleton);
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
container.Register(typeof(ICommandHandler<>), assemblies);
container.Verify();
return container;
}
IUnitOfWork
ICommandHandler<>
는 Test.Service.dll에 Core.dll
AddPersonCommandHandler
에 - 함께 진정한 해결책을 넣어 흉내 프로젝트 설정까지 구조의 스위트의 일부 및 참조 단위 테스트.
그래서, UnitOfWork
을 직접 지정했기 때문에 단위 또는 작업 등록이 올바르게 작동합니다. 반면에 ICommandHandler
인터페이스는 성공적으로 바인딩하는 코어에 있습니다. 게시 확인() 작업 단위 등록은 container
에만 표시됩니다. Test.Service.dll을로드하려면 AddPersonCommandHandler
이 나타나고 TestInit 메서드에서 AddPersonCommand
을 인스턴스화 할 수 있습니다.
프로젝트의 모든 dll을 수동으로로드해야하는 경우가 조금 있습니다. 그리고 DLL에 대한 실행 폴더를 스캔하면 일부는 이미로드 된 상태입니다 ... 다시로드가 잘 수행 될지, 이미로드되어 있는지 알아보기 위해 신중한 검사가 필요합니까?
사용 된 프레임 워크에 따라 유형을 명시 적으로 등록 /로드 할 수있는 텍스트 기반 구성이 가능하거나 'Assembly.Load()'를 사용하여 수동으로 수행 할 수 있습니다 (어셈블리 참조를 추가해도 런타임에로드되지 않습니다)). 지금 당장 나는이 질문을 완전히 이해할 수 있을지 확신하지 못한다. – Lucero
나는 다른 해결책을 보았으므로 연구를 수행했다.내가 알고 싶었던 것은 어셈블리를 직접 스캔해야만로드 할 수있는 유일한 방법이었습니다. –
등록 코드를 사용하여 어떤 플랫폼이 사용되었는지, mvc, wpf, windows 서비스 등을 알려주십시오. –