Simple Injector:在扩展方法中获取实例

时间:2013-11-08 10:27:15

标签: c# .net dependency-injection ioc-container simple-injector

我有一个扩展方法,我希望能够通过容器获取类的实例 e.g。

public static string EncryptString(this SecureString input)
{
    if (input == null) return null;

    var encryptor = Injector.Container.GetInstance<ICryptFactory>().GetEncryptor(salt);

    return encryptor.Encrypt(input.ToInsecureString());
}

但是,我真的不想要对容器的依赖,但我无法弄清楚如何获取实例。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:2)

理想情况下,您希望使用构造函数注入来注入类所需的依赖项。但是,扩展方法只是静态类的静态方法,不能对静态类进行构造函数注入。

因此,您目前正在回归Service Locator pattern far from ideal,应该尽可能避免。

因此,您必须将您的类提升为非静态类,并将扩展方法提升为非静态方法以允许它像往常一样注入,或者您必须将加密器传递给方法。