Unity容器对象解析层次结构

发布于 2024-11-14 13:08:59 字数 465 浏览 2 评论 0原文

我的容器配置如下:

container = new UnityContainer()
            .RegisterType<IA, A>()
            .RegisterType<IB, B>()
            .RegisterType<IC, C>(new InjectionConstructor(strA));

我需要的是,我想注册另一个 C 实例,例如:

container.RegisterType<IC, C>(new InjectionConstructor(strB));

注意 strA 和 strB 之间的区别。

A和B都需要C。但是我希望A使用第一个C,B使用第二个C。Unity

中有没有正确的方法来实现这一点?

谢谢

I have my container configured like following:

container = new UnityContainer()
            .RegisterType<IA, A>()
            .RegisterType<IB, B>()
            .RegisterType<IC, C>(new InjectionConstructor(strA));

What I need is, I want to register another C instance like:

container.RegisterType<IC, C>(new InjectionConstructor(strB));

note the difference between strA and strB.

Both A and B need C. But I want A to use the first C and B to use the second C.

Is there a proper way in Unity to achieve that?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

用心笑 2024-11-21 13:08:59

您将需要使用 命名类型注册

var container = new UnityContainer()
  .RegisterType<IC, C>("ForA", new InjectionConstructor(strA))
  .RegisterType<IC, C>("ForB", new InjectionConstructor(strB))

  .RegisterType<IA, A>(new InjectionConstructor(container.Resolve<IC>("ForA")))
  .RegisterType<IB, B>(new InjectionConstructor(container.Resolve<IC>("ForB")));

You will want to use a named type registration.

var container = new UnityContainer()
  .RegisterType<IC, C>("ForA", new InjectionConstructor(strA))
  .RegisterType<IC, C>("ForB", new InjectionConstructor(strB))

  .RegisterType<IA, A>(new InjectionConstructor(container.Resolve<IC>("ForA")))
  .RegisterType<IB, B>(new InjectionConstructor(container.Resolve<IC>("ForB")));
且行且努力 2024-11-21 13:08:59

我过去通过装饰/外观公共接口来实现这一点,以便识别它们进行映射。

// new interface just for A
public interface ICforA : IC { }

// new interface just for B
public interface ICforB : IC { }

container = new UnityContainer()
           .RegisterType<IA, A>()
           .RegisterType<IB, B>()
           .RegisterType<ICforA, C>(new InjectionConstructor(strA));
           .RegisterType<ICforB, C>(new InjectionConstructor(strB));

免责声明:代码是从内存中编写的,而不是 Visual Studio。

I've accomplished this in the past by decorating/facading the common interfaces in order to identify them for mappings.

// new interface just for A
public interface ICforA : IC { }

// new interface just for B
public interface ICforB : IC { }

container = new UnityContainer()
           .RegisterType<IA, A>()
           .RegisterType<IB, B>()
           .RegisterType<ICforA, C>(new InjectionConstructor(strA));
           .RegisterType<ICforB, C>(new InjectionConstructor(strB));

Disclaimer: Code written from memory, not Visual Studio.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文