2012-02-04 67 views
3

我与具有主程序的架构工作。当它启动时,它会通过反射来查看执行路径,这些DLL已经从基类继承。这些是插件。国际奥委会的WinForms插件架构

当一个新项目的新要求,通常出现一个新的插件被创建。这个插件具有主插件类,然后可能还有许多其他类和窗体。

主要插件类具有初始化方法,但由于其类库没有Program.cs中这么说要连接的依赖。

有没有办法通过一个app.config来连接依赖关系,或者你认为我应该避免使用IOC容器,并且在插件类中只有一个工厂方法来连接依赖关系?

的问题是,我可能没有主应用程序的代码更改设置IOC容器

+0

我不知道我明白。为什么你不能通过构造函数注入你的依赖? – 2012-02-04 20:06:49

+0

好吧,我可以把我的依赖接口的构造函数的参数,但我不知道我是如何实现IOC容器,因为我没有Program.cs中,以将它们连接起来 – Jon 2012-02-04 20:09:36

回答

2

的能力,所有主要的IoC容器必须连线了的app.config或通过装配发现机制的依赖关系(的能力像你描述的那样)。通常,主应用程序设置容器,然后根据容器查找插件(可以通过配置或通过装配探测来配置,如上所述)。

对于SpringFramework.net,为的app.config的例子:http://www.springframework.net/doc-latest/reference/html/objects.html#d4e437

对于温莎城堡,集探测的一个例子:http://stw.castleproject.org/Windsor.Installers.ashx

+0

他们怎么知道何时执行装配发现的地方吗? – Jon 2012-02-04 20:12:54

+0

这是由应用程序代码配置/控制。我对Castle很熟悉 - 在这种情况下,当你调用'container.Install'时,就会发生这种情况,就像我链接到的例子。我相信春天有一个非常可比的方法。 – 2012-02-04 20:14:54

+1

我的问题是,我可能无法触及的应用程序代码 – Jon 2012-02-04 20:19:21

1

虽然我认为你的问题有点含糊,基于什么我从你的问题收集我不得不说IoC很可能是最好的方式!如果你喜欢,你可以使用你的IoC容器连接工厂,或者你可以用它来连接PlugIn依赖。就我个人而言,我喜欢使用StructureMap。一个非常灵活和易于使用的IoC容器。

你可以使用的app.config列出扶养名称,然后喂国际奥委会的名称创建的依赖关系。使用Activator之类的东西来创建实例。就我个人而言,我会同时使用IoC和工厂。我将使用app.config指定依赖项名称,然后使用Factory来清理plugIn类的实例。最后我会使用IoC容器来指定工厂的实现。

希望这是一些使用的!

+0

这就是反射代码正在做的事情,如果它发现了正确类型的dll,它会创建它的一个实例,但这是主要的应用程序代码。此外,如果我有负载的DLL的我可以使用它的app.config而不是主应用程序的app.config? – Jon 2012-02-05 10:11:14

相关问题