我试图在类库中使用 spring.net 的 IoC 容器,该类库本身不是可执行文件。一个 web 项目简单地调用这个库,这个库包含对 spring 二进制文件和 spring 配置文件的引用。本质上的问题是:spring.net 是否需要驻留在可执行文件中才能启动,或者是否可以驻留在可执行文件引用的类库中?
任何帮助将不胜感激。
我试图在类库中使用 spring.net 的 IoC 容器,该类库本身不是可执行文件。一个 web 项目简单地调用这个库,这个库包含对 spring 二进制文件和 spring 配置文件的引用。本质上的问题是:spring.net 是否需要驻留在可执行文件中才能启动,或者是否可以驻留在可执行文件引用的类库中?
任何帮助将不胜感激。
您可以将部分配置作为嵌入式资源文件包含在类库项目中。假设您将其命名为 LibraryConfig.xml。然后在可执行文件的应用程序配置文件中,使用assembly:
前缀包含嵌入式资源。这是一个例子:
<spring>
<context type="Spring.Context.Support.XmlApplicationContext, Spring.Core">
<resource uri="assembly://FooLibrary/FooLibrary/LibraryConfig.xml"/>
<resource uri="config://spring/objects" />
</context>
<objects xmlns="http://www.springframework.net">
<object id="mainForm" type="FooApp.MainForm, FooApp">
<!-- mainController is some object defined in LibraryConfig.xml -->
<property name="Controller" ref="mainController"/>
</object>
</objects>
</spring>
如果您的主应用程序不需要使用 Spring 本身,我认为您可以在库中设置整个应用程序上下文。如上所述嵌入配置文件,然后定义一个单例对象来保存应用程序上下文并从嵌入的配置文件中加载它。最后,您需要为客户端代码定义某种工厂方法来创建您的类。工厂方法可以在单例本身上进行(可能使用泛型),或者在每个需要实例化的类上都有一个单独的工厂方法。这些工厂方法从应用程序上下文发出实际请求,而客户端代码永远不会看到它。
它可以驻留在可执行文件引用的 dll 中,但请确保配置包含在可执行文件的配置文件中(或被可执行文件引用)。