1
假設我有一個通用接口和一個實現它的泛型類。在Unity中具有優先級/回退和泛型的依賴注入
interface IRepository<TModel> { }
[RegisterGeneric(typeof(IRepository<>))]
class GenericRepository<TModel> : IRepository<TModel> { }
而且兩款車型User
和Order
。 User
沒有什麼特別之處,所以它使用通用的存儲庫實現。 Order
是不同的,所以我有一個特定的存儲庫。
[Register(typeof(IRepository<Order>))]
class OrderRepository : GenericRepository<Order> { }
同時你可以看到我用兩個屬性,這樣我可以掃描屬性和自動應用程序啓動時它們註冊到Unity。我要的是:
IRepository<User>
映射到GenericRepository<User>
IRepository<Order>
映射到OrderRepository
在功能的新機型,如果特定的資源庫中添加(如訂單)中,接口應該被映射到特定的實現。否則它映射到通用的。我如何實現優先功能?
你是對的。我犯了另一個愚蠢的錯誤,導致一切工作不正確。 –
順便說一下,即使你在'IRepository <>'之前註冊'IRepositry','IRepository '仍然具有更高的優先級,unity已經處理它們的優先級,不僅僅是註冊順序。 –
@DannyChen:嗯,有趣,所以這種行爲與簡單注射器如何處理這一點是一樣的。開放通用註冊通過未註冊的類型解析來處理,這意味着當缺少具體註冊時,它們總是用作後備。 – Steven