the*_*ist 4 .net c# structuremap
我有很多实现IBuilder <>接口的类,如下所示
更新: 每个Model1,Model2 ...都继承自IModel
public class A : IBuilder<Model1>
{
public Model1 Create(string param)
{
return new Model1();
}
}
public class B : IBuilder<Model2>
{
public Model2 Create(string param)
{
return new Model2();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用StructureMap来注册继承IBuilder <>的所有类
Scan(x =>
{
x.TheCallingAssembly();
x.AddAllTypesOf(typeof(IViewModelBuilder<>));
});
Run Code Online (Sandbox Code Playgroud)
更新
现在,每次我需要获得一些模块的模型我都会调用Do函数
public IModel Do(Module module)
{
//ModelSettings is taken from web.config
var builderType = Type.GetType(string.Format("{0}.{1}ModelBuilder,{2}", ModelSettings.Namespace, module.CodeName, ModelSettings.Assembly));
var builder = ObjectFactory.GetInstance(t) as IViewModelBuilder<>;
return builder.Create("");
}
Run Code Online (Sandbox Code Playgroud)
我在行中遇到编译错误ObjectFactory.GetInstance(t) as IViewModelBuilder<>.许多帖子建议创建NOT通用接口(IViewModelBuilder)并让通用接口继承它.然后我就可以像铸造一样
ObjectFactory.GetInstance(t) as IViewModelBuilder
Run Code Online (Sandbox Code Playgroud)
这是唯一的方法吗?
谢谢
您的代码Do也GetInstance应该是通用的.基本上它可能看起来像这样
public T Do<T> ()
{
return ObjectFactory.GetInstance<T>().Create();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2885 次 |
| 最近记录: |