使用FromAssembly注册温莎城堡需要一些第三方引用的dll,但不是全部

本文关键字:dll 引用 全部 第三方 注册 FromAssembly 城堡 使用 | 更新日期: 2023-09-27 18:14:07

我有一个单独的项目,我用它来处理我所有的城堡温莎设置和安装程序。

在一个安装程序中,我试图按照约定使用

注册存储库:
Classes.FromAssemblyContaining(typeof(BaseRepository)).BasedOn(typeof(IRepository))
.WithServiceSelf()

当我在项目中的任何安装程序中使用任何形式的FromAssembly时,当安装程序执行时,我将得到一个异常,它无法定位某个第三方dll。

但是如果我单独注册组件:

Component.For<IVendorRepository>().ImplementedBy<VendorRepository>()
Component.For<IContactRepository>().ImplementedBy<ContactRepository>()

我没有得到错误,配置的容器按预期返回。

尤其令人沮丧的是,当使用FromAssembly时,不是所有的第三方dll都需要放在bin文件夹中,只有少数几个。

当使用FromAssembly导致某些dll是必需的而其他dll是可选的时会发生什么?

是否有一种方法来注册约定而不必使用FromAssembly?

使用FromAssembly注册温莎城堡需要一些第三方引用的dll,但不是全部

这里没有足够的信息来明确说明为什么需要一些第三方程序集而其他程序集不需要。我最好的猜测是,当你开始通过约定注册组件时,一些第三方库是当前加载的,而另一些则没有。

然而,回答你的问题,是的,你可以按约定注册,同时避免特定的程序集。解决这个问题的一个方法(在Castle Windsor 3.x中)是只注册应用程序根命名空间中的组件,防止第三方dll被注册。

 Classes
    .FromAssemblyContaining(typeof(BaseRepository))
    .BasedOn(typeof(IRepository))
    .WithServiceSelf()
    .Where(Component.IsInNamespace("Your.Application.Namespace"))