2

您好我正在學習執行依賴注入並使用IoC容器來解決依賴關係的最佳方法。然而,我遇到的大多數例子只需要一個依賴類的實例,並且這個依賴被注入到構造函數中。但我的情況有點不同。我有一個類的方法,它不斷在循環中做一些工作,並在循環中進行迭代,我需要創建一個不同類的新實例。在這種情況下我該如何去做依賴注入? IoC容器如何解決這個問題?如果一個類需要在方法中需要時創建另一個類的多個實例,則依賴注入

感謝您的耐心

回答

2

像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,創造FirstViewModelSecondViewModel實例:

public class SomeClass { 
    public readonly IViewModelFactory _factory; 

    public SomeClass(IViewModelFactory factory) { 
     _factory = factory; 

     var secondViewModel = _factory.Create<SecondViewModel>(); 
    } 
} 

好的部分是IoC處理所有的依賴關係。 SomeClass只知道它有一個東西可以創建一個SecondViewModel因此SomeClass不需要知道SecondViewModels依賴關係。

+0

謝謝您的詳細回覆。 – rakesh 2014-09-05 14:48:19

2

注入Factory的實例,它可以創造你想要的對象:

void doLoop(){ 
for(;;){ 
    MyObj obj = factory.createNew(); 

    } 

} 
+0

感謝您的快速響應。我有進一步的情況下[這裏](http://stackoverflow.com/questions/25672179/class-structure-for-decoupling-and-dependency-injection-in-windows-service-with)你可以評論嗎? – rakesh 2014-09-05 13:54:38

相關問題