Перегрузка экземпляра StructureMap по умолчанию с явными аргументами, ошибка 205 - PullRequest
0 голосов
/ 06 октября 2010

У меня есть класс:

 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"

1 Ответ

0 голосов
/ 06 октября 2010

Вы можете перегрузить конструктор для конкретного бетона (это Structuremap 2.6.2; не уверен ранее или позже):

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

Я квалифицирую это утверждением, что я не использовал StructureMap для универсального разрешения, и я не знаю, что приведенный выше код будет компилироваться как есть. Но, вероятно, у вас уже есть компиляция ваших сопоставлений.

...