Unity 容器注入构造函数 - 无法将 lambda 表达式转换为类型“object[]”因为它不是委托类型

发布于 2024-09-07 06:56:44 字数 493 浏览 4 评论 0原文

有谁知道如何解决 Unity Container InjectionConstructor 没有 Func任何重载这一事实?

this.unityContainer
  .RegisterType<IService1Client, Service1Client>()
  .Configure<InjectedMembers>()
  .ConfigureInjectionFor<Service1Client>(
    new InjectionConstructor(() => 
      this.unityContainer.Resolve<User>()
        .SelectedDepartment
        .ApplicationServerUrl
        .ToString()));

干杯,

Does anyone knows how to workaround the fact Unity Container InjectionConstructor does not have any overload for Func<string>?

this.unityContainer
  .RegisterType<IService1Client, Service1Client>()
  .Configure<InjectedMembers>()
  .ConfigureInjectionFor<Service1Client>(
    new InjectionConstructor(() => 
      this.unityContainer.Resolve<User>()
        .SelectedDepartment
        .ApplicationServerUrl
        .ToString()));

Cheers,

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

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

发布评论

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

评论(2

阳光下慵懒的猫 2024-09-14 06:56:44

您可以使用 InjectionFactory。

this.unityContainer.RegisterType<IService1Client>(
  new InjectionFactory((ctr, type, name) =>
  {
    User user = this.unityContainer.Resolve<User>();
    string url = user.SelectedDepartment.ApplicationServerUrl.ToString();
    return new Service1Client(url);
  }));

You could use the InjectionFactory.

this.unityContainer.RegisterType<IService1Client>(
  new InjectionFactory((ctr, type, name) =>
  {
    User user = this.unityContainer.Resolve<User>();
    string url = user.SelectedDepartment.ApplicationServerUrl.ToString();
    return new Service1Client(url);
  }));
顾挽 2024-09-14 06:56:44

我想我自己找到了答案:

Func<string> GetApplicationServerUrl = () => {
  return this.unityContainer.Resolve<User>()
    .SelectedDepartment
    .ApplicationServerUrl
    .ToString(); 
};

this.unityContainer.RegisterType<IService1Client, Service1Client>()
  .Configure<InjectedMembers>()
  .ConfigureInjectionFor<Service1Client>(
    new InjectionConstructor(GetApplicationServerUrl()));

Think I found out the answer myself:

Func<string> GetApplicationServerUrl = () => {
  return this.unityContainer.Resolve<User>()
    .SelectedDepartment
    .ApplicationServerUrl
    .ToString(); 
};

this.unityContainer.RegisterType<IService1Client, Service1Client>()
  .Configure<InjectedMembers>()
  .ConfigureInjectionFor<Service1Client>(
    new InjectionConstructor(GetApplicationServerUrl()));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文