C# 一个组件如何提供其他组件?
我想让一个组件在构建后在注册表中注册其他组件。假设我有以下组件:C# 一个组件如何提供其他组件?,c#,autofac,C#,Autofac,我想让一个组件在构建后在注册表中注册其他组件。假设我有以下组件: interface IConfiguration { string SourceDirectory { get; } string TargetDirectory { get; } // other primitive-typed configuration parameters } class FileConfiguration : IConfiguration { // read par
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
然而,我想要完成的是以某种方式“输出”在DirectoryWrapperFactory
中创建的源和目标对象。基本思想是,不同的环境可能需要不同的配置提供程序。(即使没有,我认为将读取的配置参数放在一个单独的组件中也是一个好主意。)
我还希望在IoC容器中管理SourceDirectoryWrapper
和TargetDirectoryWrapper
。在我的例子中,主要是为了方便起见,我在任何地方都需要一个EventSource
实现,所以我使用属性自动连接来注入它。不是IoC容器中的每个对象都需要显式传递,这让我很恼火
那么:AutoFac是否可以实现这一点?如果是,怎么做?我查看了生命周期事件,但大多数都不允许在构建对象后访问注册表。我不太明白为什么DirectoryWrapperFactory需要存在。您可以直接将SourceDirectoryWrapper和TargetDirectoryWrapper注册为普通wireup的一部分:
builder.Register(c => new SourceDirectoryWrapper {
Directory = c.Resolve<IConfiguration>().SourceDirectory
});
builder.Register(c => new TargetDirectoryWrapper {
Directory = c.Resolve<IConfiguration>().SourceDirectory
});
builder.Register(c=>newsourcedirectorywrapper{
Directory=c.Resolve().SourceDirectory
});
寄存器(c=>new TargetDirectoryWrapper{
Directory=c.Resolve().SourceDirectory
});
除了EventSourceProxy实现之外,我正在对所有内容使用程序集扫描。。这完全有可能只是让我没有意识到我可以手动注册其中一些东西。