如何通过 class 通用说明符用 StructureMap 实例化 class?
How to instantiate class with StructureMap by the class generic specifier?
如果我有摘要class
public abstract class BaseClass<T>
where T: ISomeInterface
{ ... }
和两个派生的 class 类似
public class A : BaseClass<Model1>
{ ... }
public class B : BaseClass<Model2>
{ ... }
有没有办法通过从 ISomeInterface 继承的给定模型与 StructureMap 设置 StrunctureMap 来实例化对应的 class?
public class static MyFactory
{
public static BaseClass<T> Get<T>()
where T: ISomeInterface
{
// StructureMap instantiates class here
...?
}
}
MyFactory.Get<Model1>(); // returns instance of A
MyFactory.Get<Model2>(); // returns instance of B
我希望 StructureMap 配置适用于任何新的此类 classes(如 class C : BaseClass<Model3>
),无需配置额外的接口 ->class 映射
您正在寻找的称为批量注册,这是在 StructureMap 中的操作方法:
var container = new Container(cfg =>
{
cfg.Scan(scanner =>
{
scanner.AssemblyContainingType(typeof(BaseClass<>));
scanner.WithDefaultConventions();
scanner.ConnectImplementationsToTypesClosing(typeof(BaseClass<>));
});
});
如果我有摘要class
public abstract class BaseClass<T>
where T: ISomeInterface
{ ... }
和两个派生的 class 类似
public class A : BaseClass<Model1>
{ ... }
public class B : BaseClass<Model2>
{ ... }
有没有办法通过从 ISomeInterface 继承的给定模型与 StructureMap 设置 StrunctureMap 来实例化对应的 class?
public class static MyFactory
{
public static BaseClass<T> Get<T>()
where T: ISomeInterface
{
// StructureMap instantiates class here
...?
}
}
MyFactory.Get<Model1>(); // returns instance of A
MyFactory.Get<Model2>(); // returns instance of B
我希望 StructureMap 配置适用于任何新的此类 classes(如 class C : BaseClass<Model3>
),无需配置额外的接口 ->class 映射
您正在寻找的称为批量注册,这是在 StructureMap 中的操作方法:
var container = new Container(cfg =>
{
cfg.Scan(scanner =>
{
scanner.AssemblyContainingType(typeof(BaseClass<>));
scanner.WithDefaultConventions();
scanner.ConnectImplementationsToTypesClosing(typeof(BaseClass<>));
});
});