2010-11-24 5 views
2

У меня есть класс «Adapter», который обертывает объект с именем «X_Session». Этот adpater ожидает ILogger и ICacheManager.Параметры UnityContainer и конструктора

Как я думал об этом, определяя этот класс с Unity и позволяя ему разрешать оба интерфейса, которые вводятся в качестве входов конструктора.

А как насчет объекта X_Session? Он не зарегистрирован Unity, поскольку мне нужно его создать самостоятельно, потому что его конструктор требует входных параметров, которые я собираю из QueryString.

Должен ли я разрешить класс Adpater, а затем установить объект X_Session? Другой лучший способ?

Благодаря

ответ

0

Опять же, с абстрактным завод прост:

public interface IAdapterFactory { 
    Adapter Create(ISession session); 
} 

public class AdapterFactoryImpl : IAdapterFactory { 
    public AdapterFactoryImpl(IDependency dep) { 
     this._dep = dep; 
    } 

    public Adapter Create(ISession input) { 
    return new Adapter(_dep, input); 
    } 
} 

Вы должны зарегистрироваться в Unity только на заводе.

+0

Спасибо Onof :). Проблема заключается в том, что объект X_Session не имеет интерфейса. Он принадлежит существующему API, который я использую. Поэтому, возможно, как предложил наш коллега, я регистрирую адаптер с Unity вместе с входом X_Session в конструкторе и вручную вводим X_Session. Как вы думаете? – Bill

+0

Угадайте, я неправильно понял вашу мысль! Я не позволяю Единству ничего знать об ISession. Это только приносит мне экземпляр IAdpaterFactory и позволяет приложению вводить объект ISession или Session в конструктор Adpater. Как насчет Adpater, мне не нужно регистрировать его в Unity? И почему? – Bill

+0

Вы не можете зарегистрировать адаптер в Unity, если ему нужен объект сеанса, который будет создан, и Unity ничего об этом не знает. Вам нужен завод, потому что адаптеру нужен вход, который не разрешен Unity. – onof

0

Еще одна идея будет регистрировать объект X_Session внутри контейнера Unity во время выполнения, то с Unity инъекционного все зависимости.

+0

Как я уже сказал, объект X_session должен быть создан конструктором, который принимает входные данные. Эти входные данные сами приложения должны вводить их, поскольку они извлекаются из QueryString и других из базы данных. – Bill

+0

ОК, но вы можете создать его, а затем зарегистрироваться в Unity. Как только вы это сделаете, вы можете создать класс Adapter, а Unity также будет использовать зависимости X_Session. – Simone

+0

@ Симоне это небезопасно. При запуске нового сеанса вы перезаписываете существующий экземпляр в контейнере. – onof

Смежные вопросы