StructureMap:如何按类型而不是名称指定Ctor参数

时间:2012-12-21 22:14:34

标签: c# .net dependency-injection inversion-of-control structuremap

我想覆盖其中一个存储库的默认SessionFactory实例。我使用以下代码来实现这一点,但我不喜欢必须指定我试图覆盖的构造函数参数的名称。

var container = new Container(x =>
{
    x.For(typeof(IRepository<Facility>))
        .Use(typeof(Repository<Facility>))
            .CtorDependency<ISessionFactory("sessionFactory")
                .IsNamedInstance("CoolSessionFactory");
});

SM文档表明,只要ctor不使用多个相同类型的参数,CtorDependency方法就不要求您提供参数名称。但是,使用最新版本的SM,我发现CtorDependency没有这种重载。是否有不同的配置选项可以实现相同的目标?

1 个答案:

答案 0 :(得分:1)

您需要使用Child<>代替CtorDependency<>

var container = new Container(x =>
{
    x.For(typeof(IRepository<Facility>))
        .Use(typeof(Repository<Facility>))
            .Child<ISessionFactory>()
                .IsNamedInstance("CoolSessionFactory");
});