我正在使用 Autofac 来设置注入。
我的目的是使模块可插拔。
这意味着使用配置文件(xml,json)而不是使用代码(我已经知道)。
但是,Autofac 是否有可能在不在主(Web)项目文件中引用它的情况下查找程序集?例如,我想将新模块添加到已部署的包中,而不更改其他 dll 文件,只复制新模块的 dll 文件(与 web 项目的 dll 文件在同一文件夹中)并更改配置文件。
我正在使用 Autofac 来设置注入。
我的目的是使模块可插拔。
这意味着使用配置文件(xml,json)而不是使用代码(我已经知道)。
但是,Autofac 是否有可能在不在主(Web)项目文件中引用它的情况下查找程序集?例如,我想将新模块添加到已部署的包中,而不更改其他 dll 文件,只复制新模块的 dll 文件(与 web 项目的 dll 文件在同一文件夹中)并更改配置文件。
是的,您可以只扫描要查找类型或模块的程序集(模块更好,因为您可以控制将哪些类型注册到程序集本身):
var builder = new ContainerBuilder();
var path = "path";
var assemblyFiles = Directory.GetFiles(path, "Plugin.*.dll");
builder.RegisterAssemblyModules(
assemblyFiles.Select(
file => Assembly.LoadFile(Path.Combine(path, file))).ToArray());
如果您更喜欢配置文件,您可以按照文档中的说明使用 app.config/web.config 。如果需要,您可以找到有关使用 Autofac 4 和新的基于 ASP.NET 5 JSON 的通信的文档。