Я хочу воспользоваться преимуществами внедрения зависимостей в моем проекте Xamarin, но не могу заставить конструкторскую инъекцию работать в классах C # за представлениями XAML. Есть ли способ это сделать? Я видел руководства по настройке инъекций зависимостей в моделях представления, чтобы впоследствии использовать их в качестве репозиториев, но у меня это не работает.
Пока что пробовал Ninject и Unity.
Код: это сервис, который я хочу использовать в своем проекте PCL:
public class MyService : IMyService
{
public void Add(string myNote)
{
//Add Note logic
}
}
Интерфейс:
public interface IMyService
{
void Add(string myNote);
}
Настройка Unity в App.Xaml:
public App ()
{
InitializeComponent();
var unityContainer = new UnityContainer();
unityContainer.RegisterType<IMyService, MyService>();
var unityServiceLocator = new UnityServiceLocator(unityContainer);
ServiceLocator.SetLocatorProvider(() => unityServiceLocator);
MainPage = new MainMasterMenu(); //<-- feel that I'm missing something here as I shouldn't be creating class instances with DI, right ?
}
Использование, которое я хотел бы увидеть. Это файл .CS за стартовой страницей XAML:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainMasterMenu : MasterDetailPage
{
private IMyService _myService;
public MainMasterMenu(IMyService myService)
{
_myService = myService
}
private void SomeFormControlClickEvent(object sender, ItemChangedEventArgs e)
{
_myService.Add("hi");
}
}