【问题标题】:Unity equivalent for Ninject's Bind.ToMethod of IPrincipal,IIdentityUnity 等效于 Ninject 的 IPrincipal,IIdentity 的 Bind.ToMethod
【发布时间】:2012-01-05 00:17:04
【问题描述】:

我正在尝试在 Unity 中复制以下 Ninject 语法,但没有任何运气:

Bind<IIdentity>().ToMethod(c => HttpContext.Current.User.Identity);

我认为它应该看起来像:

IUnityContainer container;
...
container.RegisterType<IIdentity>(HttpContext.Current.User.Identity);

应该怎么样?

【问题讨论】:

    标签: c# .net unity-container ninject iidentity


    【解决方案1】:

    虽然neontapir's 答案可以工作,但该扩展方法已过时。现在正确的做法是使用InjectionFactory:

    container.RegisterType<IIdentity>(new InjectionFactory(u => HttpContext.Current.User.Identity));
    

    【讨论】:

    • 感谢 BFree。这正是我所需要的。
    【解决方案2】:
    container.RegisterInstance<IIdentity>(...);
    

    【讨论】:

    • 这不起作用,因为它会捕获 User.Identity 的当前实例,并始终返回它。 OP 希望在每次要求容器解析 IIdentity 时评估 User.Identity。
    • 是的。如果需要确切的语义,那么您的答案显然更接近于此。
    • HttpContext.Current.User.Identity 在容器初始化时不可用,所以是的,希望每次都对其进行评估。
    • 关键是你想要的:() => HttpContext.Current.User.Identity NOT HttpContext.Current.User.Identity
    【解决方案3】:

    我相信static factory extension 会做到这一点。我对 Unity 生疏了。 Seeman 的 .NET 中的依赖注入 是解决此类情况的好资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2023-04-08
      • 2017-09-06
      • 2011-11-03
      • 1970-01-01
      • 2015-10-07
      • 2012-06-15
      相关资源
      最近更新 更多