我正在尝试创建一个IWindsorContainer
工厂来执行与应用程序一起打包的所有安装程序(即bin
文件夹中的所有内容)
它需要为:
- Windows 客户端应用程序(可能与 Clickonce 一起安装也可能不安装)
- Windows 服务
- 基于 NUnit 的集成测试套件(可以在开发时使用 R# 运行)
- 一个 ASP.NET MVC 应用程序
FromAssembly.InThisApplication()
不起作用,因为这不是“根”程序集(甚至可能没有根程序集)
我的第一个天真的实现是:
return new WindsorContainer()
.Install(
FromAssembly.InDirectory(
new AssemblyFilter(
Path.GetDirectoryName(
Assembly.GetExecutingAssembly()
.Location))));
这适用于 1 和 2,但不适用于其余部分。
然后我尝试了:
return new WindsorContainer()
.Install(
FromAssembly.InDirectory(
new AssemblyFilter(
Path.GetDirectoryName(
new Uri(
Assembly.GetExecutingAssembly()
.CodeBase)
.LocalPath))));
这至少适用于 ASP.NET,但可能会破坏卷影复制。
我有更好的替代方案来支持卷影复制方案吗?
或者我应该忘记整个想法并Install(FromAssembly.InThisApplication())
从入口点程序集运行,确保所有引用都是明确的?
附加信息:
此代码是MyCompany.DI
由不同项目类型共享的库的一部分,其中包含...嗯,DI 相关的东西,随处使用的东西的安装程序(GenericFactoryInstaller
例如)等。
其他安装程序包含在特定的根项目或库中(例如,MyCompany.Data
包含NHInstaller
找到返回 NH 配置的方法的方法,因为它使用它来创建会话工厂)
换句话说,这个“元安装程序”应该找到当前应用程序中的所有安装程序并运行它们。我只是想找到一种避免复制和粘贴的方法。