可以制作一个Resolve<>在方法内部而不是在构造函数或类的属性中注入依赖项?
public void Foo()
{
if (...)
var context = Unity.Resolve<Context>();
}
这个想法是一个条件依赖性解决方案,它使用Unity来管理在通常的DI使用中创建的对象的生命周期。 DI在Web Api项目中设置,因此MVC DependencyResolver.Current将无法工作。
答案 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)
那不是个好主意。应用程序中应该知道容器的唯一部分是组合根。这是一个反模式的服务定位器的示例,因为没有显式声明依赖项。
听起来你想引入一个可以通过构造函数注入注入的工厂类型。