0
我經常需要使用一些本身必須加載一些依賴才能工作的類。 但是,我的組件可以有多個具體的依賴關係實現,它將在某個對象參數的基礎上選擇一個,而不是另一個。解決用戶參數的依賴
真正的問題是,應用程序啓動時對象參數始終是未知的,所以我無法在此刻註冊任何依賴項,也無法解決它們。
相反,例如,當我需要使用一些類本身也需要加載一些依賴我知道爲了使用concreteBuilder
對象參數返回我合適的實現:
interface ISample { }
class ParamForBuildSomeISampleImplementation
{
// this instance cannot be create by my startUpApplication - Container - Resolver.
// Instead, all time dependency is required (buttonClick, pageLoad and so on), this class can be instantiated.
}
class Sample1 : ISample
{
// some implementation
}
class Sample2 : ISample
{
// some other implementation
}
class MyISampleFactory
{
// Build ISample
public ISample Build(ParamForBuilderISample obj)
{
// if obj.someProperty == ".." return new Sample1();
// else if obj.someProperty == "--" return new Sample2();
// else if ...
}
}
class NeedsDependency
{
ISample _someSample;
public NeedsDependency(ISample someSample)
{
_someSample = someSample;
}
}
// *** Controllor - ApplicationStartup - other ***
// Here I have not idea how to build ISample dependency
@@ EDIT
// *** button click event handler ***
// Ok, here I know how to create ParamForBuilderISample,
// hence I can call MyISampleFactory, then, I can Use NeedDependency class:
ParamForBuilderISample obj = new ...
obj.SomeProperty = ...
obj.otherSomeProperty = ...
ISample sample = MyISampleFactory.Build(obj);
NeedDependency nd = new NeedDependency(sample);
// perfect, now my buttonClick can execute all what it wants
nd.DoSomething();
nd.DoOtherStuff();
是我的情景適合依賴注入模式?如果屬實,我真的不知道如何建立我的模式。
我不明白你的例子。我知道如何僅在代碼隱藏中使ParamForBuilderISample實例。你已經使用了一個Action方法(這是什麼?),但是Action方法不知道任何東西。最後,你說:「依賴注入並沒有消除需要有方法論證」,但我仍然不知道它是如何做到的。 – bit 2013-03-13 13:48:54
我編輯了我的文章的代碼片段,以更好地闡明我的問題..請參閱@@編輯詞。 – bit 2013-03-13 19:05:02