我有一个DevExpress示例mvc网站应用程序。它使用Castle Windsor作为IOC。我只是试图通过Autofac取代但没有运气!
这是示例代码:
container
.Register(Component
.For<DbRepositories.ClinicalStudyContext>()
.LifestylePerWebRequest()
.DependsOn(new { connectionString }))
.Register(Component
.For<DbRepositories.IClinicalStudyContextFactory>()
.AsFactory())
.Register(Component
.For<FirstStartInitializer>()
.LifestyleTransient())
.Register(Component
.For<IUserRepository>()
.ImplementedBy<DbRepositories.UserRepository>())
这是我的Autofac转换:
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.Register(c =>
new DbRepositories.AdminContext(connectionString))
.InstancePerHttpRequest();
builder.RegisterType<DbRepositories.IAdminContextFactory>()
.As<DbRepositories.IAdminContextFactory>();
builder.RegisterType<DbRepositories.UserRepository>()
.As<IUserRepository>().InstancePerHttpRequest();
关于我的研究,Autofac上没有AsFactory()的实现。
这是IAdminContextFactory
界面:
public interface IAdminContextFactory
{
AdminContext Retrieve();
}
这是错误的应用程序说:
类型上没有构造函数 可以找到'Admin.Infrastructure.EFRepository.IAdminContextFactory' 使用'公共绑定标志'。
任何人都可以帮忙吗?
感谢。
答案 0 :(得分:3)
您的IAdminContextFactory
注册将失败,因为RegisterType
的第一部分必须是服务类型。在这种情况下,实现 IAdminContextFactory
接口的类。 Autofac尝试构建该类型的实例,这肯定会失败,因为您无法实例化接口。
因此,您需要的是IAdminContextFactory
接口的实现。 Castle AsFactory
方法为您生成此实现。您可以使用the Autofac AggregateService extra。
有了这些位,你可以这样做:
builder.RegisterAggregateService<IAdminContextFactory>();