【发布时间】:2018-08-13 08:42:42
【问题描述】:
我想解决我项目中的所有依赖项。我的项目由 Web、Service 和 DataAccess 3 层组成。
我之前在使用 AutoFac 时做过这个:
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(x => x.FullName.Contains("OrderForm")).ToArray();
builder.RegisterAssemblyTypes(assemblies)
.AsImplementedInterfaces()
.InstancePerRequest();
现在我想在 .net 核心中做同样的事情。我试过这个:
var allProviderTypes = System.Reflection.Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Namespace != null && t.Namespace.Contains("Providers"));
问题是这只会返回 web-assembly 而不是其他的。
【问题讨论】:
-
您仍然可以将 AutoFac 与 (ASP).NET Core 的 IServiceCollection/IServiceProvider 一起使用。 .NET Core DI/IoC 容器旨在简单,缺乏更高级的功能。这是一个良好的开端,ASP.NET Core 被设计为可扩展的,包括第 3 方 IoC 容器的插件:docs.autofac.org/en/latest/integration/aspnetcore.html
-
@Tseng:但是我如何获得所有的程序集呢?我不能在 .net core 中使用 BuildManager?
-
如果它使用
.GetEntryAssembly().GetReferencedAssemblies()或AppDomain.GetAssemblies()(请参阅 GitHub issue),它应该可以工作,这在较新的 .NET Core/Standard 版本中可用 -
您确定 t.Namespace.Contains("Providers") 吗?
标签: c# asp.net-core .net-core