【发布时间】:2018-05-13 20:37:42
【问题描述】:
我有一个典型的 3 层 .NET 应用程序。
领域层不引用其他项目。
数据访问层引用域层并实现一些存储库。
Web 视图层使用域层的服务并控制 Autofac(IOC 容器)。
域和数据访问层实现 Autofac 模块。这意味着从 Web 视图层,我可以扫描所有程序集并将它们注册到 Autofac 以提供依赖注入。
我不想让我的 Web 视图层知道或关心使用了哪个数据访问层,所以我不想包含对它的引用。但是,如果我不引用数据访问层,则查找程序集的扫描将不会拾取它。
下面是在 Web View Layer 中调用的启动方法:
private static void RegisterAutofacAssemblyModules(ContainerBuilder builder)
{
IEnumerable<Assembly> assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(x => x.FullName.Contains("Boutique"));
if (HostingEnvironment.InClientBuildManager)
{
assemblies = assemblies.Union(BuildManager.GetReferencedAssemblies().Cast<Assembly>()).Distinct();
}
builder.RegisterAssemblyModules(assemblies.ToArray());
}
我添加了 .Where() 以希望提高性能,因为需要扫描的程序集更少。 (不确定这是不是真的)。
如果我引用数据访问层(在 Web 视图层中),这段代码可以正常工作。但我不希望 Web 视图层引用数据访问层。那么如何扫描程序集以确保包含数据访问层?如果可能的话,我想获取解决方案中的所有程序集。
【问题讨论】:
标签: .net .net-assembly layer n-tier-architecture