gpt4 book ai didi

caSTLe-windsor - CaSTLe温莎流利注册: AllTypes and type forwarding

转载 作者:行者123 更新时间:2023-12-02 00:41:09 24 4
gpt4 key购买 nike

给定以下类/接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com