我正在编写插件作为插件体系结构的一部分。插件的创建方式是通过反射和CreateInstance
。因此调用默认的构造函数。我无法触及的这段代码,我试图找到一种明智的方式来使用DI,而无需使用框架。在没有第三方框架的情况下实现DI
我相信我有3个选项:
我)穷人的DI(PMDI)
II)工厂模式
III)TinyIOC或类似(即处理DI一个CS文件)
我开始看PMDI,但后来一个依赖项需要另一个依赖项,所以我最终得到类似于这个丑陋,可能会变得更糟的东西:
public MyMainPluginClass() : this(new Repo(new Logger()))
{
}
public MyMainPluginClass(IRepo repo)
{
}
然后我进入了工厂模式的想法,但找不到任何体面的演示代码。我想我会有这样的事情:
public static FactoryUtility
{
public static IRepo GetRepo()
{
return new Repo(GetLogger());
}
public static ILogger GetLogger()
{
return new Logger();
}
}
public MyMainPluginClass() : this(FactoryUtility.GetRepo())
{
}
public MyMainPluginClass(IRepo repo)
{
}
这是怎么回事?
然后我碰到TinyIOC这是一个类,做所有的依赖注册,但我相信它需要安装在Program.cs中,我没有在类库中。如果有人使用这个任何经验可以像这样使用:
public MyMainPluginClass()
{
var container = TinyIoCContainer.Current;
container.AutoRegister();
var implementation = container.Resolve<IRepo>();
MyMainPluginClass(implementation);
}
public MyMainPluginClass(IRepo repo)
{
}
是否有实现DI任何替代方法,而无需使用第三方库,如果没有哪种办法从上面选择?
注意:上面的代码尚未编译,只是我认为会工作的想法。如果它们是有效的方法,请发布更正。
只是FYI;你的第三个代码示例也基本上是穷人依赖注入。 – 2012-02-13 22:33:26