【问题标题】:StructureMap default instance overloading with explicit arguments, error 205带有显式参数的 StructureMap 默认实例重载,错误 205
【发布时间】:2011-04-21 23:09:12
【问题描述】:

我有一堂课:

 public class SystemQuery<T> : ISystemQuery<T> where T : class, IUIView {

    protected ISession session;
    protected ICriteria baseCriteria;

    public SystemQuery(SessionContext sessionContext) {
        this.session = sessionContext.Session;
        this.baseCriteria = session.CreateCriteria<T>();
    }

    public SystemQuery(SessionContext sessionContext, string newConnectionString)
    {
        var connection = new SqlConnection(newConnectionString);
        connection.Open();
        this.session = sessionContext.Session.SessionFactory.OpenSession(connection);
        this.baseCriteria = session.CreateCriteria<T>();
    }

StructureMap 知道如何构建 SessionContext、ISession 和 ICriteria。

在我的另一堂课中(我正在尝试在这种情况下设置初始状态):

    public T BuildQuery<T>() where T: ISystemQuery {
        return container.GetInstance<T>();
    }

    public T BuildQuery<T>(string newConnectionString) where T: ISystemQuery
    {
        var dict = new Dictionary<string, object>();
        dict.Add("newConnectionString",newConnectionString);
        return container.GetInstance<T>(new ExplicitArguments(dict));
    }

问题是它在创建实例时没有重载构造函数,当它调用时

container.GetInstance<T>();

它本身不调用单参数构造函数...而是报错:

结构图异常代码:205 InstanceKey“f4fea539-2b04-4067-9c1a-990516268cea”缺少请求的实例属性“newConnectionString”

【问题讨论】:

    标签: c# nhibernate dependency-injection structuremap ioc-container


    【解决方案1】:

    您可以重载特定混凝土的构造函数(这是 Structuremap 2.6.2;不确定更早或更晚):

    ObjectFactory.Initialize(
        x => x.For<ISystemQuery>.Add<BuildQuery<T>>.Ctor<string>().Is(connectionString)
    );
    

    我将使用我没有使用 StructureMap 进行通用解析的声明来限定这一点,并且我不知道上面的代码会按原样编译。但大概您已经编译好了映射。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多