Существует пример на MSDN Deferring the Resolution of ObjectsЕдинство отложив разрешение объектов
// Create a Unity container
IUnityContainer myContainer = new UnityContainer();
// Create an IEnumerable resolver for the IMyClass interface type
var resolver = myContainer.Resolve<Func<IEnumerable<IMyClass>>>();
// ... other code here...
// Register mappings for the IMyClass interface to appropriate concrete types
myContainer.RegisterType<IMyClass, FirstClass>("First");
myContainer.RegisterType<IMyClass, SecondClass>("Second");
myContainer.RegisterType<IMyClass, ThidClass>("Third");
// Resolve a collection of the mapped target objects
IEnumerable<IMyClass> myClassInstances = resolver();
Я вдохновил немного и пытается сделать что-то, как показано ниже.
Мой интерфейс и конкретные классы:
public interface IImplementMe
{
void DoSomething();
}
public class FirstImplementation : IImplementMe
{
public void DoSomething()
{
Console.WriteLine("First");
}
}
public class SecondImplementation : IImplementMe
{
public void DoSomething()
{
Console.WriteLine("Second");
}
}
Мой класс Service, как это:
public class Service
{
private bool someCondition;
Func<Dictionary<string, IImplementMe>> myClassInstances;
public Service(Func<Dictionary<string, IImplementMe>> myClassInstances)
{
this.myClassInstances = myClassInstances;
}
public void Foo()
{
if (someCondition)
{
myClassInstances.Invoke()["First"].DoSomething();
}
else
{
myClassInstances.Invoke()["Second"].DoSomething();
}
}
}
Как вы можете понять, что я пытаюсь зарегистрировать несколько экземпляров интерфейса и должен использовать правильный по времени работы по требованию.
Как я могу зарегистрировать свои типы, чтобы я мог использовать их в своем классе обслуживания, предоставив псевдоним.
Я знаю, что могу зарегистрировать их, используя aliasses и разрешить их, предоставив aliasses. Но я не хочу давать ссылку на Unity в моем классе обслуживания.
Возможно, существует более мудрый способ сделать это.
Вы правы, я не должен использовать отложенное разрешение. Мое приложение находится на .Net 4.0, поэтому я должен использовать Unity2. На самом деле я пытаюсь зарегистрировать несколько экземпляров интерфейса. В Unity3 вы можете сделать это с помощью «container.RegisterTypes», но этот метод расширения не существует в Unity2. – fkucuk