Dependency injection 如何在运行时解析参数化类?

Dependency injection 如何在运行时解析参数化类?,dependency-injection,castle-windsor,aspnetboilerplate,Dependency Injection,Castle Windsor,Aspnetboilerplate,我有这样一个视图模型: 公共视图模型示例(MyClass a) { } 我试图通过以下方式解决此问题: var myClassObj=new MyClass(); var vm=IocManager.Resolve(myClassObj);//其中args=MyClass的对象 签名IIocResolver。T解析(对象类型) 如果我从System.Activator执行此操作,那么我将调用return(T)Activator.CreateInstance(typeof(T),myClass

我有这样一个视图模型:

公共视图模型示例(MyClass a)
{
}
我试图通过以下方式解决此问题:

var myClassObj=new MyClass();
var vm=IocManager.Resolve(myClassObj);//其中args=MyClass的对象
签名
IIocResolver。T解析(对象类型)

如果我从
System.Activator
执行此操作,那么我将调用
return(T)Activator.CreateInstance(typeof(T),myClassObj)并且工作正常

另外,如果
ViewModelSample
只有无参数构造函数,那么它可以很好地解决它

我得到一个例外:

缺少依赖项。组成部分 ViewModels.ViewModelSample具有 依赖 Dto.MyClass,它可以 无法解决。确保在中正确注册了依赖项 容器作为服务,或作为内联参数提供

MyClass
是一个简单的DTO,因此它没有继承
ITransientDependency
。此外,我想在运行时分配这个值

我如何解决这个问题

签名
IIocResolver。T解析(对象类型)

在本例中,
new{a=myClassObj}
,因为
a
是参数的名称

var vm=IocManager.Resolve(新的{a=myClassObj});
参考文献
匿名类型:

如前所述,在构建过程中提供运行时数据(假设您的
ViewModelSample
是可注入的)可能不是最好的方法。此外,在MVC样式的web应用程序中,视图模型通常是简单的数据持有者,不包含任何依赖项或应用程序逻辑。从这个意义上讲,通过容器解析视图模型是不常见的。同样,在您的示例中,
ViewModelSample
没有来自Windsor的依赖项。取而代之的是,考虑使用C*<代码>新< /COD>关键字:<代码>新建视图模型(new MyCype)(新MyCub())<代码> > <代码> ViewModelSample <代码>。我的应用程序中的ViewModel继承了一些具有依赖项的服务。我有了新的
方法,但我认为它对DI很有用,将来可能会用于测试。AspNetzero示例正在通过DI或
System.Activator
进行实例化,因此我正在清理代码。无参数的Viewmodel创建得很好。多亏了@aaron parameterized,现在它与IoCManager的配合很好。。