현재 등록중인 종속성을 삽입하려고 할 때 문제가 있습니다. 부트 스트랩 로더를 시작하여 설정 파일을 읽는 응용 프로그램이 있고이 설정 파일의 특정 값에서 리플렉션을 사용하여 개체를 만듭니다. 코드를 사용하여 여기에서 이야기하도록하겠습니다./다음 계약을 준수 BootstrapSettings
라는 객체 직렬화 복원 직렬화Autofac - 'X'유형의 생성자가 없습니다.
설정
설정 파일은 일반 오래된 XML 파일입니다 파일 :이 설정 파일 내에서
public interface IBootstrapSettings
{
string Get(string key);
void Set(string key, string value);
}
, 나는 PlainTextEncryptor
또는 TDESEncryptor
을 선택할 수있는 순간에 IEncryptor
을이 응용 프로그램에 사용할 특정 키를 가지고 있는데, 후자는 설정 파일에서 암호를 읽습니다. 해당 생성자 설정 파일에서이 암호를 읽으려면 IBootstrapSettings
의 인스턴스를 전달합니다. 현재 PlainTextEncryptor
이 그것을 사용하지 않더라도 IBootstrapSettings
의 인스턴스를 각 암호화 장치에 주입하고 있습니다. 리플렉션을 사용하여이 인스턴스를 만들 필요가 있기 때문에 매개 변수를 사용하지 않는 생성자와 IEncryptor
유형을 생성하는 생성자를 구별 할 수있는 방법을 모르기 때문에이 작업을 수행하고 있습니다 (하지만이 작업은 다른 작업입니다. 나는 생각한다). 다음
IEncryptor 생성자
내가 현재 가지고 각 IEncryptor
의 생성자입니다.
public sealed class PlainTextEncryptor : IEncryptor
{
private readonly IBootstrapSettings _bootstrapSettings;
public PlainTextEncryptor(IBootstrapSettings bootstrapSettings)
{
_bootstrapSettings = bootstrapSettings;
}
}
public sealed class TDESEncryptor : IEncryptor
{
private readonly IBootstrapSettings _bootstrapSettings;
public TDESEncryptor(IBootstrapSettings bootstrapSettings)
{
_bootstrapSettings = bootstrapSettings;
}
}
내 종속성을 설정 해요 방법 상에, 사출
. 나는 다른 생성 아무것도하기 전에 부트 스트랩 종속성을 생성하는 Autofac 모듈이 - 그것은 다음과 같습니다 : 나는 IEncryptor
의 인스턴스가 나는 오류를 얻고있다 .Resolve
하려고 할 때
public sealed class BootstrapSettingsModule : Autofac.Module
{
private readonly string _filePath;
public BootstrapSettingsModule(string filePath)
{
_filePath = filePath;
}
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
builder.Register(c => new BootstrapSettings(_bootstrapSettingsPath))
.As<IBootstrapSettings>()
.SingleInstance();
builder.Register(c => (IEncryptor)Activator.CreateInstance(Type.GetType(c.Resolve<IBootstrapSettings>().Get("encryptionprovider")), args: new { bootstrapSettings = c.Resolve<IBootstrapSettings>() }))
.As<IEncryptor>()
.SingleInstance();
}
}
이제이 잘 실행, 문제가 발생 유형이 '생성자가 무엇이든간에'생성자가 발견되지 않습니다.. Autofac이 내 IBootstrapSettings
을 해결할 수 없기 때문에 그리고 내 IEncryptor
에 기본 매개 변수없는 생성자가 없기 때문에 이것이 적합하다고 생각합니다.
여기서 무엇을 해야할지 모르겠지만, IBootstrapSettings
을 단일 인스턴스로 지정하여 잘못된 작업을하고 있습니까? 아니면 Autofac의 바인딩을 올바르게 이해하지 못합니까? 언제나처럼 어떤 도움을 감사하십시오!
encryptor 클래스의 생성자를 표시하십시오. –
@DanielHilgarth가 생성자 코드로 업데이트되었습니다. –