0

我有一个类:StructureMap默认实例有明确的参数超载,错误205

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>(); 

它本身不会调用单参数的构造函数...相反得到一个错误:

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

回答

0

可以重载特定混凝土(这是Structuremap 2.6.2构造函数;不知道提前或推后):

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

我将与我没有使用StructureMap做普通决议的声明符合这一点,我不知道上面的代码将编译原样。但大概你已经有了你的映射编译。