2017-10-18 66 views
0

我最近开始尝试依赖注入和IoC。C#如何避免使用IoC解析器传递参数

这是困扰我的一个问题... 我有一个依赖解析器,基本上允许我做以下

injection.Register<IMyInterface, MySpecificType>(); 

这会自动解决的类型,只要东西在代码请求它并提供MySpecificType作为IMyInterface的实现。

这对ASP.NET中的控制器非常适用,例如,控制器构造函数没有参数并且也由框架动态调用。

但是如果我有我自己的自定义类(在本例中为MySpecificType),并且我想要动态解决它,会发生什么情况。也就是说,只要代码中的某些内容需要IMyInterface,解析器应通过MySpecificType

下面是一个例子:

injection.Register<IMyInterface, MySpecificType>(); 


public SomeClass(IMyInterface dependency) 
{ 
    //do something 
} 

然后在我的代码的地方我想创建的SomeClass一个新的实例。

var instance = new SomeClass(//What do i pass here) 

我应该在构造函数中传递什么。当然我可以做类似new MySpecificType()的东西,但这会让我的自动依赖解析器毫无意义。我应该有一个单独的空构造函数并使用它,或者这是不可能发生的事情。

+2

我会说,这取决于你使用IoC框架... –

+0

如果一个类不能被解析为完整的对象图的一部分,这可能意味着你正试图将_runtime data_注入到它。您应该防止这样做:[不要使用运行时数据编写应用程序组件](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=99)。 – Steven

回答

1

你应该问你的IoC容器为你实例化你的课程。那真的取决于你的IoC容器。

例如,autofac

var builder = new ContainerBuilder(); 
builder.RegisterType<MyComponent>().As<IService>(); 
var container = builder.Build(); 

using(var scope = container.BeginLifetimeScope()) 
{ 
    var service = scope.Resolve<IService>(); 
} 
+0

谢谢。显然这取决于具体的容器,但我想知道这个问题的一般方法是什么。 干杯 – Kobek

相关问题