我有一個Dictionary
,它將枚舉值作爲鍵並返回一個對象作爲值。對象構造函數涉及調用需要很長時間並消耗大量內存的方法。現在,字典中的每個可能的對象都會被創建,即使只需要一個對象。有沒有辦法只創建鍵指定的對象?Make對象的字典只創建指定鍵的對象
private DataPreparer SetUpOuDataPreparer()
{
Scope = _activeDirectoryScope.Context;
var activeDirectorySearcher = new ActiveDirectorySearcher(
_activeDirectoryScope);
var ouDataPreparers = new Dictionary<QueryType, DataPreparer>
{
[OuComputers] = new DataPreparer
{
Data = activeDirectorySearcher.GetOuComputerPrincipals(),
Attributes = DefaultComputerAttributes
},
[OuGroups] = new DataPreparer
{
Data = activeDirectorySearcher.GetOuGroupPrincipals(
CancellationToken),
Attributes = DefaultGroupAttributes
},
[OuUsers] = new DataPreparer
{
Data = activeDirectorySearcher.GetOuUserPrincipals(),
Attributes = DefaultUserAttributes
},
[OuUsersDirectReports] = new DataPreparer
{
Data = activeDirectorySearcher.GetOuUsersDirectReports(
CancellationToken),
Attributes = DefaultUserDirectReportsAttributes
},
[OuUsersGroups] = new DataPreparer
{
Data = activeDirectorySearcher.GetOuUsersGroups(
CancellationToken),
Attributes = DefaultUserGroupsAttributes
}
};
return ouDataPreparers[QueryType];
}
也就是說方法創建所有五個DataPreparer
S,其中的每一個具有在ActiveDirectorySearcher
昂貴的方法調用。我想以某種方式只創建由QueryType
密鑰指定的DataPreparer
,最好不使用switch
或if/else
。爲了更好的格式化/風格,我將其從那些更改爲Dictionary
。
爲什麼要使用字典呢?爲什麼不只是一個帶有switch語句的工廠方法方法? –
@AntP我在問題中提到我想避免切換,如果出於文體原因。 –
我不確定他們是什麼「風格的原因」,但創建了一個你只需要一個對象的集合,因爲這個工作的正確工具看起來不太漂亮,這對我來說似乎有點落後。 –