您好我正在學習執行依賴注入並使用IoC容器來解決依賴關係的最佳方法。然而,我遇到的大多數例子只需要一個依賴類的實例,並且這個依賴被注入到構造函數中。但我的情況有點不同。我有一個類的方法,它不斷在循環中做一些工作,並在循環中進行迭代,我需要創建一個不同類的新實例。在這種情況下我該如何去做依賴注入? IoC容器如何解決這個問題?如果一個類需要在方法中需要時創建另一個類的多個實例,則依賴注入
感謝您的耐心
您好我正在學習執行依賴注入並使用IoC容器來解決依賴關係的最佳方法。然而,我遇到的大多數例子只需要一個依賴類的實例,並且這個依賴被注入到構造函數中。但我的情況有點不同。我有一個類的方法,它不斷在循環中做一些工作,並在循環中進行迭代,我需要創建一個不同類的新實例。在這種情況下我該如何去做依賴注入? IoC容器如何解決這個問題?如果一個類需要在方法中需要時創建另一個類的多個實例,則依賴注入
感謝您的耐心
像dkatzel說,使用factory
。這是我的方式。如果你創建的發言權,BaseViewModel
實例:
public interface IViewModelFactory {
T Create<T>() where T : BaseViewModel;
}
public class ViewModelFactory : IViewModelFactory {
private readonly Dictionary<Type, Func<BaseViewModel>> _factories;
public ViewModelFactory(Dictionary<Type, Func<BaseViewModel>> factories) {
_factories = factories;
}
public T Create<T>() where T : BaseViewModel {
return _factories[typeof (T)]() as T;
}
}
所以,現在我們有一個注射工廠,可以配置爲創建並返回任何實現BaseViewModel
。
IOC中,我們需要配置類型返回所以想象這些視圖模型(並注意在第二視圖模型的依賴):
public abstract class BaseViewModel {
// ...
}
public class FirstViewModel : BaseViewModel {
// ...
}
public class SecondViewModel : BaseViewModel {
private readonly ISomeDependency _injectedDependency;
public SeoncdViewModel(ISomeDependency dependency) {
_injectedDependency = dependency;
}
}
和(使用Autofac),我們將其配置是這樣的:
var builder = new ContainerBuilder();
builder.Register(b => {
var factories = new Dictionary<Type, Func<BaseViewModel>> {
{ typeof (FirstViewModel),() => new FirstViewModel() },
{ typeof (SecondViewModel),() => new SecondViewModel(b.Resolve<ISomeDependency>()) },
};
return new ViewModelFactory(factories);
}).As<IViewModelFactory>();
而現在我們可以注入IViewModelFactory
,創造FirstViewModel
或SecondViewModel
實例:
public class SomeClass {
public readonly IViewModelFactory _factory;
public SomeClass(IViewModelFactory factory) {
_factory = factory;
var secondViewModel = _factory.Create<SecondViewModel>();
}
}
好的部分是IoC處理所有的依賴關係。 SomeClass
只知道它有一個東西可以創建一個SecondViewModel
因此SomeClass
不需要知道SecondViewModels
依賴關係。
注入Factory
的實例,它可以創造你想要的對象:
void doLoop(){
for(;;){
MyObj obj = factory.createNew();
}
}
感謝您的快速響應。我有進一步的情況下[這裏](http://stackoverflow.com/questions/25672179/class-structure-for-decoupling-and-dependency-injection-in-windows-service-with)你可以評論嗎? – rakesh 2014-09-05 13:54:38
謝謝您的詳細回覆。 – rakesh 2014-09-05 14:48:19