2

我有一个使用泛型的服务接口。该接口有多种实现。这些实现还使用泛型并为封闭的服务接口提供多个具体组件。对于(极其简化)示例:

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。

4

0 回答 0