代码之家  ›  专栏  ›  技术社区  ›  Benny

必须先注册每个类,然后autopac容器才能解决问题?

  •  12
  • Benny  · 技术社区  · 16 年前

    假设这种情况:

    public class B {};
    
    public class C
    {
         public C(B b){}
    }
    

    要从autopac容器中解析c,我必须同时将b和c注册到容器中。 但是,今天我用 Unity 似乎我只需要把B注册到容器中,然后C就可以解决了。

    所以自动空调不能像Unity那样?

    1 回复  |  直到 12 年前
        1
  •  21
  •   Peter Lillevold Rene    12 年前

    使用开箱即用的autopac,您希望使用的每种类型都在容器中注册,或者直接使用 Register... 方法或批量使用 RegisterAssemblyTypes . 但是还有其他的选择,看看 Nicholas article about resolving everything . 所以是的,自动空调可以做Unity所做的,但是你必须启用它。

    更新: 实际上,“解决任何问题”功能是内置的,您可以执行以下操作:

            var cb = new ContainerBuilder();
            cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
            return cb.Build();
    

    AnyConcreteTypeNotAlreadyRegisteredSource 你可以解决这两个问题 C B 没有登记。

    请注意,服务的生命周期由 任何未经注册的具体类型源 "per dependency scope" .

    注: this topic 在“自动空调”讨论组中是相关的。

    推荐文章