구성 요소를/후에 구성 요소를 레지스트리에 등록하려고합니다. 이 전 다음과 같은 구성 요소가 있다고 가정 해 봅시다 :구성 요소는 어떻게 다른 구성 요소를 제공합니까?
interface IConfiguration
{
string SourceDirectory { get; }
string TargetDirectory { get; }
// other primitive-typed configuration parameters
}
class FileConfiguration : IConfiguration
{
// read parameters from some config file
}
class SourceDirectoryWrapper
{
public byte[] ReadFile(string filename)
{
// read a file from the source directory
}
public string Directory { get; set; }
}
class TargetDirectoryWrapper
{
public byte[] WriteFile(string filename)
{
// write a file into the source directory
}
public string Directory { get; set; }
}
class DirectoryWrapperFactory
{
public DirectoryWrapperFactory(IConfiguration config)
{
var source = new SourceDirectoryWrapper {
Directory = config.SourceDirectory
};
var target = new TargetDirectoryWrapper {
Directory = config.SourceDirectory
};
}
}
구성 요소 FileConfiguration
및 DirectoryWrapperFactory
은 평소으로 등록 할 수 있습니다.
그러나 내가 달성하고 싶은 것은 source
과 target
개체를 DirectoryWrapperFactory
에서 만든 것입니다. 기본 개념은 서로 다른 환경에서 서로 다른 구성 제공자가 필요할 수 있다는 것입니다. (그렇지 않더라도, 구성 요소를 읽는 것은 별도의 구성 요소에 넣는 것이 좋습니다.)
또한및 TargetDirectoryWrapper
을 IoC 컨테이너에서 관리하고 싶습니다. 필자의 경우 편의상 주로 - 나는 어디서나 필요로하는 EventSource
구현을 가지고 있으므로 속성 autowiring을 사용하여 주입한다. IoC 컨테이너에없는 모든 객체는 명시 적으로 전달해야합니다. 어떤 종류의 버그일까요?
이렇게 : AutoFac에서 가능합니까? 그렇다면 어떻게? 전 라이프 사이클 이벤트에서 찌르지 만 대부분은 객체가 빌드 된 후 레지스트리에 대한 액세스를 허용하지 않습니다.
: 당신은 직접 정상 wireup의 일환으로 SourceDirectoryWrapper 및 TargetDirectoryWrapper을 등록 할 수 있습니다 수동으로. – millimoose