Представьте я что-то будет создан через завод:Как использовать Unity для инъекций зависимостей через фабрику?
public sealed class MyClass
: IMyClass
{
private IMyDao MyDao { get; set; }
public MyClass(IMyDaoFactory factory)
{
MyDao = factory.MyDao;
}
}
Это может решить через службу как:
public sealed class MyService
: IMyService
{
private readonly IMyClass myClass;
public MyService(IMyDaoFactory factory)
{
myClass = new MyClass(factory);
}
}
Это легко соединять в единстве, как:
var container = new UnityContainer();
container.RegisterType<IMyService, MyService>();
container.RegisterType<IMyDaoFactory, MyDaoFactory>();
container.RegisterType<IMyClass, MyClass>();
Отмечая регистрацию MyClass, как я могу установить Unity, чтобы он автоматически регистрировался и разрешался через фабрику? То есть то я больше не нужно:
myClass = new MyClass(factory);
только:
this.myClass = myClass; (passed through the constructor
as IMyClass and resolved by Unity)
Надежда, что имеет смысл. Заранее спасибо.
Из любопытства, почему вам нужно использовать интерфейс для конкретного типа, учитывая, что интерфейс предоставляет поведение? –
Это попытка избежать более далекого рефакторинга. Если я смогу это сделать, я могу оставить весь слой данных один. – Richard
Ответ Натана кажется ОК; просто зарегистрируйте соответствующие зависимости, и Unity проведет все за вас. например В IMyClass будет введен IMyDaoFactory. Есть ли что-то еще, что вам нужно (возможно, с жизнью объекта)? –