Внедрить локальный (на уровне модуля) объект состояния во все представления, которые хотят иметь общее состояние.Если интерфейс, который определяет объект состояния, является локальным для вашего модуля, то другие модули не смогут ссылаться на объект состояния, потому что они не могут ссылаться на интерфейс.
Итак: если модуль A имеет 3 представления,возьмите объект, реализующий IStatefulContainer (также объявленный в модуле A), и IStatefulContainer зарегистрирован в Unity с использованием RegisterInstance, а не просто RegisterType, у которого будет синглтон, ограниченный для модуля.«Государственная» служба, которая управляла государством.Это может позволить вам добавить больше функциональности, если вам это нужно, и является более «призменным» подходом.
EDIT
Если вы используете этот объект состояния в разных модулях,может сделать следующее:
1) Поместить интерфейс в сборку, на которую будет ссылаться любой модуль, который хочет его использовать.
Сборка A
public interface IBlah
{
string Add(string stateKey, string stateValue);
}
Assembly B (referencing Assembly A)
public class Module:IModule
{
private IUnityContainer _container;
public Module(IUnityContainer container)
{
_container=container;
}
public void Initialize()
{
IBlah blah1=new BlahContainer();
IBlah blah2=new BlahContainer();
_container.RegisterInstance<IBlah>(blah1,"BlahContainer1");
_container.RegisterInstance<IBlah>(blah2,"BlahContainer2");
}
}
МодульC (ссылка на сборку A)
_container.Resolve<IBlah>("BlahContainer1");
_container.Resolve<IBlah>("BlahContainer2");
По сути, мы определяем интерфейс в сборке, которой мы рады поделиться между модулями.У некоторых проектов есть «Инфраструктура» или Общие сборки, которые содержат сервисные интерфейсы, которые используются другими модулями - здесь это будет хорошо соответствовать.
Затем наш модуль ссылается на сборку с контрактом в нем.
В данный момент я полагаюсь на «магические струны», но есть много способов обойти это.
Надеюсь, это немного яснее.