Я совершенно новый в DI, поэтому я создал новый проект, чтобы понять, как он работает в простом проекте. У меня есть проект BLL, который имеет только
public interface IService
{
string Method();
}
internal class SomeService : IService
{
public string Method()
{
return "Hi from BLL";
}
}
class BllModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes((Assembly.GetExecutingAssembly())
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
}
Я хочу разрешить эту службу в проекте пользовательского интерфейса.
class Program
{
static void Main(string[] args)
{
//Autofac Configuration
var builder = new ContainerBuilder();
builder.RegisterModule(new BllModule());
var container = builder.Build();
// here i check if container contatins my type (just for debugging), so it has Service BLL.IService
var s = container.ComponentRegistry.Registrations.ToList();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
using (var scope = container.BeginLifetimeScope())
{
// so here i have my exception
var service = scope.Resolve<IService>();
service.Method();
}
}
}
Поэтому код в использовании бросков блока
Autofac.Core.Registration.ComponentNotRegisteredException:
"The requested service 'BLL.IService' has not been registered."
Я обновил код, так что теперь он работает