我做以下,現在如何註冊一個在SimpleInjector中具有比TService更多類型參數的TImpl?
container.Register<IDatabaseMapper<User>, DatabaseMapper<User, OracleException>>();
container.Register<IDatabaseMapper<Desk>, DatabaseMapper<Desk, OracleException>>();
container.Register<IDatabaseMapper<Commodity>, DatabaseMapper<Commodity, OracleException>>();
但我想這樣做
container.RegisterOpenGeneric(typeof(IDatabaseMapper<>), typeof(DatabaseMapper<,OracleException>));
這在某種程度上可能嗎?
'的typeof(DatabaseMapper <,OracleException>)' 沒有表明在編譯時任何錯誤,所以我錯誤地認爲它應該工作。你的方法工作,但是這正是我想避免 - 一個數據庫供應商特定的異常創建一個類,而不是提供類型爲AA參數 – mrt181 2012-03-05 07:58:55
這樣'DatabaseMapper:IDatabaseMapper 其中TEntity:類,IEntity 其中TException:DbException' –
mrt181
2012-03-05 08:05:59
創建額外的類通常不是問題,尤其是當您將該類放到容器的配置附近時。在這種情況下,它對應用程序是不可見的,只是你的[Composition Root]的一部分(http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx)。重新考慮將此解決方案放在更復雜(但有趣)的'ResolveUnregisteredType'上。 – Steven 2012-03-05 08:59:07