作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定以下类/接口(interface):
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()
})
);
最佳答案
我凭内存写的可能不准确:
有一个 WithService.Select
重载。您可以在那里传递返回 IEnumerable 的自定义方法。然后,您可以使用它来相应地匹配您的类型。
关于caSTLe-windsor - CaSTLe温莎流利注册: AllTypes and type forwarding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503291/
给定以下类/接口(interface): class Repository : IRepository {} class UserRepository : Repository, IUserRepos
我有这个来自旧城堡的代码: IoC.Container.Register( AllTypes .FromAssemblyNamed(a) .Pick().Wit
我是一名优秀的程序员,十分优秀!