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的配合很好。。