При работе над некоторым тестовым приложением у меня возник сценарий, в котором я хочу поделиться одним экземпляром класса среди других экземпляров через Unity.Unity Share Один экземпляр между несколькими объектами
У меня есть интерфейс под названием ICommon, и это было реализовано в Common class. У меня есть два других интерфейса IInterface1 и IInterface 2, которые были реализованы в Class1 и CLass2. Но Class1 и Class2 имеют зависимость от ICommon, и эта зависимость разрешается через Unity. Но моя проблема заключается в том, что они не используют один и тот же экземпляр, а создают несколько экземпляров ICOmmon. Поэтому я ищу что-то, благодаря чему Unity будет делиться одним и тем же объектом, если он уже создан или создаст новый.
общественный интерфейс ICommon { void Method1(); }
public class Common : ICommon
{
public void Method1()
{
return;
}
}
public interface IInterface1
{
void Function1();
}
public class Class1 : IInterface1
{
private readonly ICommon _common;
public Class1(ICommon common)
{
_common = common;
}
public void Function1()
{
return;
}
}
public interface IInterface2
{
void Function1();
}
public class Class2 : IInterface2
{
private readonly ICommon _common;
public Class2(ICommon common)
{
_common = common;
}
public void Function1()
{
return;
}
}
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<IInterface1, Class1>();
container.RegisterType<IInterface2, Class2>();
container.RegisterType<ICommon, Common>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
public class Test
{
private IInterface1 _interface1;
private IInterface1 _interface2;
public Test(IInterface1 interface1, IInterface2 interface2)
{
_interface1 = interface1;
_interface2 = interface2;
}
}
Так что я хочу один экземпляр должен быть создан для ICommon и будут распределены между Class1 и Class2.
Было бы синглтон для все запроса я имею в виду тот же экземпляр будет общими для все запроса пользователя или только для этого запроса. Я использую EntityFramework, и я поместил некоторый код в ICommon (Ex: IDataBaseFactory), чтобы получить экземпляр моего DbContext и хочу разделить один и тот же экземпляр DbContext среди моего репозитория и UnitOfWork, чтобы UnitOfWork мог совершить то, что когда-либо позволяло мне добавить или обновить в моем репозитории. Поэтому я просто хочу убедиться, что это просто для этого запроса не весь пользовательский запрос, иначе шансы на то, что данные будут конфликтующими, если несколько пользователей получат доступ к одному и тому же DbContext. – Deb
Этот вопрос может помочь вам http://stackoverflow.com/questions/4651844/does-resolvet-return-objects-per-session – Rad
Что я узнаю из приведенной выше ссылки, это ContainerControlledLifetimeManager создаст одноэлементный объект и будет разделенных между несколькими экземплярами, но это именно то, чего я не хочу. Я хочу, чтобы экземпляры были для каждого конкретного вызова. Для этого есть код, но для контроллера. – Deb