我有一个使用泛型的服务接口。该接口有多种实现。这些实现还使用泛型并为封闭的服务接口提供多个具体组件。对于(极其简化)示例:
public interface IService<T1, T2> { }
public class ServiceImpl<T> :
IService<IDbConnection, T>,
IService<DbConnection, T>,
IService<SqlConnection, T> { }
然后在温莎城堡注册:
container.Register(Component
.For<IService<SqlConnection, SomeOtherClass>>()
.Named(NameHelper.GetName(typeof(SqlConnection), typeof(SomeOtherClass))
.Forward<IService<DbConnection, SomeOtherClass>>()
.Forward<IService<IDbConnection, SomeOtherClass>>()
.ImplementedBy<ServiceImpl<SomeOtherClass>>()
.LifestyleTransient());
有没有办法给每个Forward
's 提供备用名称?这个问题可以解决,我猜,通过Foward
用自己的名字单独注册每个人,但如果能够做这样的事情会很好:
.Forward<IService<DbConnection, SomeOtherClass>>(
NameHelper.Getname(typeof(DbConnection), typeof(SomeOtherClass))
(在这个简化的问题和示例的范围之外,但我可能也可以使用IGenericServiceStrategy
和/或IGenericImplementationMatchingStrategy
代替注册每个单独的排列来实现整体设计目标,但我受到时间限制,因此能够单独命名前锋将是伟大的)。
有问题的代码使用的是 Castle Windsor v3.3.0。