我正在編寫插件作爲插件體系結構的一部分。插件的創建方式是通過反射和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