DbContext
구현을위한 연결 문자열이 여러 개인 응용 프로그램이 있습니다. 이를 소비 클래스에서 지원하기 위해 DbContext
인스턴스를 제공 할 수있는 Get
메서드를 사용하여 IDbContextProvider
인터페이스를 만들었습니다.간단한 인젝터 꾸미 꾸기 및 공분산
나는 또한 ICommandHandler
일을 처리했습니다. 성공적인 명령 실행시 DbContext.SaveChangesAsync()
을 호출 할 데코레이터를 만들려고합니다. 나는이 같은 내 장식 등록 해요 : 나는 DbContext
implementaiton에 대한 형식 매개 변수를 추가하지 않기 때문에, 지금
container.RegisterDecorator(typeof(ICommandHandler<>),
typeof(SaveChangesCommandHandlerDecorator<>));
을, 나는 DbContext
에서 파생 된 모든 클래스가 SaveChangesAsync()
방법을 알고, 내가 상상 공분산을 사용할 수 있습니다. 그래서 내 인터페이스는 다음과 같습니다
public public interface IDbContextProvider<out TDbContext> where TDbContext : DbContext
{
TDbContext Get(DbPrivileges privileges);
}
그리고 내 장식의 관련 부분 : 그러나
public class SaveChangesCommandHandlerDecorator<TCommand> : ICommandHandler<TCommand>
where TCommand : ICommand
{
private readonly ICommandHandler<TCommand> _handler;
private readonly IDbContextProvider<DbContext> _dbContextProvider;
public SaveChangesCommandHandlerDecorator(
ICommandHandler<TCommand> handler, IDbContextProvider<DbContext> dbContextProvider)
{
_handler = handler;
_dbContextProvider = dbContextProvider;
}
...
, 내 용기에 Verify()
전화, 그것이 찾고으로 IDbContextProvider
이 잘못되었다고 불평 "기본"IDbContextProvider<DbContext>
대신 내 애플 리케이션에 등록 된 것들 중 하나.
타입 SaveChangesCommandHandlerDecorator의 생성자 <는 CreateUserCommand> 'dbContextProvider'이름의 파라미터를 포함하고 SaveChangesCommandHandlerDecorator < CreateUserCommand의 생성자> IDbContextProvider < DbContext 보장 registered.Please 등록 또는 변경되지 않았는지> < DbContext를 IDbContextProvider 입력 >. 요청 된 형식이 (Redacted) .IDbContextProvider < Microsoft.EntityFrameworkCore.DbContext> 인 동안 다른 형식 (Redacted) .IDbContextProvider < TDbContext>에 대한 등록이 있음에 유의하십시오.
Simple Injector는 dbContextProvider
매개 변수에 주입 할 구체적인 유형을 알 수 없으므로 실제로 의미가 있습니다.
기본 장식물 인 ICommandHandler
구현의 종속성을 들여다 볼 수 있도록 내 장식자를 만드는 방식을 사용자 정의하는 방법이 있습니까? 생성시 여기에서 IDbContextProvider
서명을 선택하십시오. 그래서 만약 내 명령 처리기가 IDbContextProvider<AwesomeDbContext>
이라면, 나는 그것을 내 데코레이터를 위해서도 해결하기를 원한다.
그래, 이건 내 질문을 올바르게 요약하고 상세한 답변을 주셔서 감사합니다! 나는 수집 경로를 고려하지 않았지만 확실히 더 깨끗한 코드를 생성 할 것입니다. –