我试图在类库中使用spring.net的IoC conatiner,它本身不是可执行文件。一个Web项目只是调用这个库,这个库包含对spring二进制文件和spring的配置文件的引用。 基本上问题是: spring.net是否需要驻留在可执行文件中才能启动,或者是否可以驻留在将由可执行文件引用的类库中?
任何帮助将不胜感激。
答案 0 :(得分:3)
您可以在类库项目中包含部分配置作为嵌入式资源文件。假设您将其称为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本身,我认为您可以在库中设置整个应用程序上下文。如上所述嵌入配置文件,然后定义单个对象以保存应用程序上下文并从嵌入的配置文件加载它。最后,您需要为客户端代码定义某种工厂方法来创建类。工厂方法可以单独使用单例(可能使用泛型),也可以在每个需要实例化的类上使用单独的工厂方法。这些工厂方法使得来自应用程序上下文的实际请求和客户端代码永远不会看到它。
答案 1 :(得分:2)
它可以驻留在由可执行文件引用的dll中,但请确保该配置包含在可执行文件的配置文件中(或由其引用)。