0
进出口新的依赖注入和香港专业教育学院决定,因为它似乎有最好的“开箱即用”支持MVC5(其他人可能会更好,但我是一个新手,这一点)如何设置Autofac注册
使用autofac林创建简单的使用场景,并从维基Ive得到了在application_start
将下面的代码global.asax
protected void Application_Start()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<ArtistController>().InstancePerHttpRequest();
builder.RegisterType<ArtistService>().As<IArtistService>().SingleInstance();
builder.RegisterType<ArtistRepository>().As<IArtistRepository>().SingleInstance();
builder.RegisterType<BandMemberRepository>().As<IBandMemberRepository>).SingleInstance();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
,在我ArtistController
我有这个
私人IArtistService _artistService
;
然后我有一些代码检索和更新数据,都非常简单。这工作正常,我开始让我的头在整个概念。
我的问题是,我是否必须手动注册所有具体类Im?我的应用程序最终可能会增长,我会有许多类,所以这将是一个痛苦的管理。我也碰到过这样的
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
其尽可能林意识到应该为我注册的一切,但它没有工作。难道我做错了什么 ?
好的,感谢您的建议。
的autofac网站显示了使用lambda表达式的例子,所以我加了这个Global.asax中
builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces();
,但没有工作,任何想法,为什么?