3
考慮下面的類/接口:城堡溫莎流利登記:AllTypes和轉發類型
class Repository<T> : IRepository<T> {}
class UserRepository : Repository<User>, IUserRepository {}
有一個簡單的方法來改造這個:
container.Register(
Component.For<IUserRepository>()
.Forward<IRepository<User>>()
.ImplementedBy<UserRepository>()
);
進入通過AllTypes自動登記?到目前爲止,我缺少類型轉發。
container.Register(
AllTypes.FromAssemblyContaining(typeof(IUserRepository))
.BasedOn(typeof(Repository<>))
.WithService.Select((t, b) => new List<Type> {
t.GetInterfaces().Where(x => !x.IsGenericType).FirstOrDefault()
})
);
但隨着類型轉發?因此,這將工作:
container.Resolve<IUserRepository>().GetType() == container.Resolve<IRepository<User>>().GetType()
下面的代碼完全不是那麼回事,因爲FirstInterface()返回IRepository <用戶>:
container.Register(
AllTypes.FromAssemblyContaining(typeof(IUserRepository))
.BasedOn(typeof(Repository<>))
.WithService.FirstInterface()
);
編輯:我是很接近,所以在我的情況:
container.Register(
AllTypes.FromAssemblyContaining(typeof(IUserRepository))
.BasedOn(typeof(Repository<>))
.WithService.Select((t, b) => new List<Type> {
t.GetInterfaces()
})
);
是的,在我寫下這個問題後不久就發現了! – mathieu