如何通过 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<>));
    });
});