C# 检索当前程序集或';激活上下文';来自Autofac
我有一个从C# 检索当前程序集或';激活上下文';来自Autofac,c#,.net,dependency-injection,autofac,.net-assembly,C#,.net,Dependency Injection,Autofac,.net Assembly,我有一个从程序集的基本目录加载文件的服务: // pseudo class FileLoaderService : IFileLoader { var _baseAssembly; .ctor(Assembly baseAssembly) { _baseAssembly = baseAssembly; } Stream LoadFile(string name) { return GetFileStream(_baseAsse
程序集的基本目录加载文件的服务:
// pseudo
class FileLoaderService : IFileLoader {
var _baseAssembly;
.ctor(Assembly baseAssembly) {
_baseAssembly = baseAssembly;
}
Stream LoadFile(string name) {
return GetFileStream(_baseAssembly.Location + path);
}
}
此服务被注入位于不同程序集中的各种其他已解析服务(有些在编译时未知,但在运行时加载)。现在,我想在解析IFileLoader
时提供当前程序集(例如,解析的目标类型所在的程序集)的参数
我尝试了这两种方法,使用工厂委托注册FileLoaderService
,以及ResolvedParameter
,但是这两种方法都只提供当前的IComponentContext
,它不提供有关注入目标类型的任何信息
我要找的是这样的东西:
containerBuilder.Register(context => {
var targetType = context.Target.TargetType; // does not exist
var hostingAssembly = targetType.Assembly;
return new FileLoaderService(hostingAssembly);
}).As<IFileLoader>();
Target
在本例中是直接注入IFolderLoader
的类?@YacoubMassad。举例说明。:)你能根据自己的需要来调整产品吗?或者从中得到一些想法?
// pseudo
class SomeTypeInAnotherAssembly
.ctor(IFileLoader loader) {
var fileStream = loader.LoadFile("test.png");
// the file stream is now loaded from the base directory of AnotherAssembly.dll
// since the injected IFileLoader was constructed using the assembly
// of SomeTypeInAnotherAssembly
}