2017-10-18 65 views
0

我最近開始嘗試依賴注入和IoC。C#如何避免使用IoC解析器傳遞參數

這是困擾我的一個問題... 我有一個依賴解析器,基本上允許我做以下

injection.Register<IMyInterface, MySpecificType>(); 

這會自動解決的類型,只要東西在代碼請求它並提供MySpecificType作爲IMyInterface的實現。

這對ASP.NET中的控制器非常適用,例如,控制器構造函數沒有參數並且也由框架動態調用。

但是如果我有我自己的自定義類(在本例中爲MySpecificType),並且我想要動態解決它,會發生什麼情況。也就是說,只要代碼中的某些內容需要IMyInterface,解析器應通過MySpecificType

下面是一個例子:

injection.Register<IMyInterface, MySpecificType>(); 


public SomeClass(IMyInterface dependency) 
{ 
    //do something 
} 

然後在我的代碼的地方我想創建的SomeClass一個新的實例。

var instance = new SomeClass(//What do i pass here) 

我應該在構造函數中傳遞什麼。當然我可以做類似new MySpecificType()的東西,但這會讓我的自動依賴解析器毫無意義。我應該有一個單獨的空構造函數並使用它,或者這是不可能發生的事情。

+2

我會說,這取決於你使用IoC框架... –

+0

如果一個類不能被解析爲完整的對象圖的一部分,這可能意味着你正試圖將_runtime data_注入到它。您應該防止這樣做:[不要使用運行時數據編寫應用程序組件](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=99)。 – Steven

回答

1

你應該問你的IoC容器爲你實例化你的課程。那真的取決於你的IoC容器。

例如,autofac

var builder = new ContainerBuilder(); 
builder.RegisterType<MyComponent>().As<IService>(); 
var container = builder.Build(); 

using(var scope = container.BeginLifetimeScope()) 
{ 
    var service = scope.Resolve<IService>(); 
} 
+0

謝謝。顯然這取決於具體的容器,但我想知道這個問題的一般方法是什麼。 乾杯 – Kobek

相關問題