使用 UrlHelper 进行依赖注入

发布于 2024-12-23 23:41:01 字数 209 浏览 3 评论 0原文

我在 Web 应用程序中使用 Ninject,作为其中的一部分,我需要在驻留在单独程序集中的 UrlHelper 扩展方法中进行一些注入。我什至无法获得对内核的静态引用,因为显然库程序集不能(也不应该)引用我的 Web 应用程序。我知道静态类不能很好地与 DI 配合使用,但因为我需要使用 UrlHelper,所以事情变得有点复杂。我怎样才能重新架构这个?如果您需要查看任何代码或需要更多信息,请告诉我。

I am using Ninject in my web application, and as part of this I need some injections to be made in a UrlHelper extension method that resides in a separate assembly. I can't even get a static reference to the kernel because obviously the library assembly can't (nor should be) referring to my web application. I know static classes don't work well with DI, but because I need to use UrlHelper it makes things a little more complicated. How could I rearchitect this? Let me know if you need to see any code or need more information.

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

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

发布评论

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

评论(1

此生挚爱伱 2024-12-30 23:41:01

您是否考虑将非静态类作为静态 UrlHelper 类的 DI 友好包装器?

public class DynamicUrlHelper
{
  private readonly ISomeDependency dep;
  public DynamicUrlHelper(ISomeDependency dep)
  {
    this.dep = dep;
  }
  public Uri DoMagic(Uri uri)
  {
    return uri.DoMagic(this.dep);
  }
}
public interface ISomeDependency
{
}
public static class UrlHelper
{
  public static Uri DoMagic(this Uri uri, ISomeDependency dep)
  {
    // do it!
    return uri;
  }
}

您可以将必要的值注入到DynamicUrlHelper中,并在需要的任何地方注入DynamicUrlHelper

Did you consider a non-static class as DI-friendly wrapper around the static UrlHelper class?

public class DynamicUrlHelper
{
  private readonly ISomeDependency dep;
  public DynamicUrlHelper(ISomeDependency dep)
  {
    this.dep = dep;
  }
  public Uri DoMagic(Uri uri)
  {
    return uri.DoMagic(this.dep);
  }
}
public interface ISomeDependency
{
}
public static class UrlHelper
{
  public static Uri DoMagic(this Uri uri, ISomeDependency dep)
  {
    // do it!
    return uri;
  }
}

You can inject the necessary values into DynamicUrlHelper and inject DynamicUrlHelper anywhere it is needed.

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