我希望能夠將這些特定的警告標記爲已接受[012]是 這可能嗎?
不,目前(2.2.3)版本沒有辦法做到這一點。整個診斷API是內部的。可以在單元測試中觸發診斷驗證using reflection,並過濾出您不感興趣的警告。如果還有任何警告,則可以讓測試失敗。
這是可能的,但確實需要一些工作,並且在大多數情況下您不希望有任何潛在的生活方式不匹配違規行爲。 documentation about the Potential Lifestyle Mismatches指出:
不要忽略這些警告。對於此警告的誤報爲 很少見,即使發生這種情況,註冊或應用程序設計也總是可以以警告消失的方式進行更改。
在你的情況下,你的終身範圍實例是指一個瞬態,你似乎意識到這種可能的風險,你似乎已經檢查,這不是問題。儘管如此,如果您沒有明確地記錄這些信息,這可能會在將來發生類更改時成爲問題,而其他開發人員可能會誤導。
通常有多種方法可以解決這個問題。例如,您可以將瞬態依賴性提升爲生命週期範圍,但您可能已經考慮過這一點。另一種選擇是讓ObjectMaterializedSubscriber
不是靠一個短暫IEventPublisher
,但在一個單Func<IEventPublisher>
,可註冊如下:
container.RegisterSingle<Func<IEventPublisher>>(
() => container.GetInstance<IEventPublisher>());
這使得ObjectMaterializedSubscriber
的代碼溝通清楚,它希望得到一個對象用更短的生活方式,即使那IEventPublisher
被要求一次。
另外兩個警告(我假設)是由我使用SimpleInjector Decorator工具創建責任鏈的原因。
不幸的是,你偶然發現了2.2.1版本中的一個錯誤。問題不是由添加裝飾器引起的,而是由於使用了未註冊的類型解析。該錯誤已在2.2.3中修復。
UPDATE
由於簡單噴油器2.4有一個Diagnostics API,讓您與診斷服務程序進行交互。這使您可以編寫單元測試並過濾掉任何不需要的警告,然後讓單元測試驗證您是否沒有任何警告。例如:
[TestMethod]
public void Container_Always_ContainsNoDiagnosticWarnings()
{
// Arrange
var container = Bootstrapper.GetInitializedContainer();
container.Verify();
// Assert
var results = Analyzer.Analyze(container);
Assert.IsFalse(results.Any(), Environment.NewLine +
string.Join(Environment.NewLine,
from result in results
select result.Description));
}
註冊裝飾者不應觸發此警告。 「警告是由......建立責任鏈引起的」,你究竟意味着什麼?有多少構造函數參數具有'LetterGenerator'? –
Steven
2013-05-02 21:22:08
@Steven它有5個 - 其餘的是假設,因爲只有5個服務被注入。 – qujck 2013-05-02 21:22:51