我對此持堅持態度,我想知道處理此問題的最佳方法是什麼。我有一個WebApi控制器,我想要注入ICommand實例,但是在檢查Post請求數據後,我可以知道我需要什麼實例。我將給出一個更清晰的例子,但我的問題也適用於接收事件參數的Winform事件,並根據此事件arg您希望注入不同的實現。統一注入WebAPI動作內的一個實例
public class TestController : ApiController
{
public object Post(int id)
{
ICommand command = null;
if(id = 1)
{
command = new Id1Command();
}
else
{
command = new Id2Command();
}
return new object();
}
}
我能想到的唯一的事情是創建一個工廠,接受統一的容器作爲參數,該工廠調用container.Resolve與命名實例中。
我的問題是,我被教導你不應該註冊或解決你的作文根之外,這是違反良好做法(根據馬克西曼)。我一直在尋找這個問題的最佳設計。
因此,我會在工廠中移動命令實例的創建,但我認爲這還不夠好,因爲我仍然必須在工廠內使用「新的Id1Command」,並且實例不會由容器管理。我正在尋找類似container.Resolve(id)的東西,但我不想在工廠中使用container.Resolve,因爲我認爲在組合根之外使用它是錯誤的。我對嗎? –
ekalchev
我更新了我的文章 –
謝謝您的回答。我也發現這是解決這個問題的最優雅的方式,但不幸的是你需要第三方擴展https://outlawtrail.wordpress.com/2012/07/27/auto-generated-factories-with-unity/ – ekalchev