0
我正在尋找使用Unity來解析類型在運行時根據收到的特定數據。我的代碼(類似於下圖所示)當前在啓動時將類型註冊到引導程序類中,然後在主流程中決定需要什麼類型。Unity:有條件解決
我想要做的是用分辨率替換使用'new'關鍵字的代碼行,但是因爲此代碼與我的引導程序不匹配,所以我不知道如何做到這一點......我'對Unity來說新的東西,所以請放輕鬆。
// In Bootstrapper class
resolver.RegisterType<IDataType1, DataType1>();
resolver.RegisterType<IDataType2, DataType2>();
resolver.RegisterType<IDataType3, DataType3>();
// Main flow...outwith bootstrapper
switch (dataRecordType)
{
case DataRecordType.dataType1:
DataType1 dt1 = new DataType1();
dt1.ProcessData();
break;
case DataRecordType.dataType2:
DataType2 dt2 = new DataType2();
dt2.ProcessData();
break;
case DataRecordType.dataType3:
DataType3 dt3 = new DataType3();
dt3.ProcessData();
break;
default:
break;
}
+1值得一提的是,IOC容器不應該錯過組合根(因爲OP似乎是初學者)。也有沒有一種方法可以創建一個工廠,而不用'container.Resolve'耦合代碼? – 2014-10-28 12:37:51
@SriramSakthivel:感謝您的注意。我同意,容器不應該被引用到任何地方,除了Composition Root。可以將工廠與容器分離,但由於此工廠實現可以是Compostion Root的一部分,因此工廠引用容器本身沒有任何問題。但另一種選擇是將'DataTypeX'類注入工廠而不是容器。 – Steven 2014-10-28 12:51:32
我想你的意思是將'Func'注入工廠?否則我們需要多個工廠實例來獲取'DataTypeX'的新實例是不是? –
2014-10-28 12:55:47