手动解决Unity依赖关系

时间:2015-08-18 21:15:28

标签: dependency-injection unity-container

可以制作一个Resolve<>在方法内部而不是在构造函数或类的属性中注入依赖项?

public void Foo()
{
    if (...)
        var context = Unity.Resolve<Context>();
}

这个想法是一个条件依赖性解决方案,它使用Unity来管理在通常的DI使用中创建的对象的生命周期。 DI在Web Api项目中设置,因此MVC DependencyResolver.Current将无法工作。

2 个答案:

答案 0 :(得分:3)

虽然有些人认为这是一种糟糕的模式,但您可以实现一种简单的静态服务定位器模式:

public static class Unity
{
    private static IUnityContainer _container;

    public static void SetAppContainer(IUnityContainer container)
    {
        _container = container;
    }

    public static T Resolve<T>()
    {
        return _container.Resolve<T>();
    }
}

答案 1 :(得分:0)

那不是个好主意。应用程序中应该知道容器的唯一部分是组合根。这是一个反模式的服务定位器的示例,因为没有显式声明依赖项。

听起来你想引入一个可以通过构造函数注入注入的工厂类型。