I'm currently working on a Xamarin.Forms application using Prism and Unity as my IoC container.
I'm also attempting to add the business logic framework CSLA to my application.
There is a Xamarin sample provided here:
In particular, everything seems to be wired up using this piece of code:
public App()
{
InitializeComponent();
var services = new ServiceCollection();
services.AddCsla();
services.AddTransient(typeof(DataAccess.IPersonDal), typeof(DataAccess.PersonDal));
serviceProvider = services.BuildServiceProvider();
ApplicationContext = serviceProvider.GetRequiredService<ApplicationContext>();
MainPage = new AppShell();
}
I'm trying to figure out how to fit that sort of code / registration into the Prism framework with Unity as the IoC container. Is this a time when I'd need to use the extensions? I saw those, but I was still coming up a little short on understanding what I should be doing.
I feel like there's a fundamental misunderstanding on my part of what I should be trying to achieve here, so any guidance on what direction I should be going in would be great.
I think this may be what I'm looking for:
Basically, it seems that I can override the container creation in my app.cs. From there I can call whatever methods I'd like against the ServiceCollection, build the container using the extension (in this case Unity) and return that container to the application.
Testing this in code I can see that I'm now able to inject the IDataPortalFactory into my view model along with the IServiceProvider, and the IServiceProvider is of type Unity.Microsoft.DependencyInjection.ServiceProvider.
So, if I'm getting IDataPortalFactory in my view model, I'm assuming my call to AddCsla() worked, and if the IServiceProvider is considered to be a Unity service provider, I must have successfully replaced the Service Provider implementation.