c# - Autofac 使用 Assembly.Load 注册 dll

标签 c# asp.net-mvc-3 model-view-controller autofac

我正在尝试注册一个名为“BigEye.Business”的 dll 并将该文件引用到 mvc 3 项目。但是当我试图在那个 dll 中获取一个对象的实例时,autofac 说它没有注册。以下是我如何注册和解析对象:

private static IContainer SetDIContainer()
        {
            var builder = new ContainerBuilder();
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            builder.RegisterType<UserAuthManager>().As<IUserAuth>().InstancePerHttpRequest();
            builder.RegisterType<SessionManager>().As<ISession>().InstancePerHttpRequest();


            //Here is the code to register that dll
            var services = Assembly.Load("BigEye.Business");
            builder.RegisterAssemblyTypes(services);
            IContainer container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

            return container;
        }

        public static T GetInstance<T>()
        {
            IContainer container = SetDIContainer();

            using(var httpRequestScope = container.BeginLifetimeScope("httpRequest"))
            {
                return httpRequestScope.Resolve<T>();
            }

        }

当我调用 GetInstance 函数时,我得到“请求的服务‘BigEye.Interfaces.Business.IUser’尚未注册”。我应该在 Business dll 中注册所有组件吗?有办法吗?因为 Business 中的对象和服务会随着时间发生变化。

谢谢

最佳答案

我假设您的程序集包含一个或多个 IUser 接口(interface)的实现。现在,当你运行时:

 builder.RegisterAssemblyTypes(services);

如果没有任何附加参数,您实际上是在该程序集中注册了所有类型按类键控。您可能会看到此解决方案有效:

GetInstance<SomeSpecificUserImplementation>();

为了通过界面键控您的服务,只需执行以下操作:

  builder.RegisterAssemblyTypes(services).AsImplementedInterfaces();

现在您的所有服务都将由它们实现的接口(interface)而不是特定类作为键,因此以下内容将起作用:

GetInstance<IUser>();

关于c# - Autofac 使用 Assembly.Load 注册 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530349/

相关文章:

c# - sql 查询 c# 的单元测试

javascript - 更改根据点击显示的 anchor ?

.net - 自定义注释 Asp.Net MVC 4 的客户端验证

c# - ModelMetaData、Custom Class Attributes 和一个难以描述的问题

Laravel:什么是模型?

c# - MongoDB C# 单声道

c# - 在 ASP.Net 中使用客户端证书进行数字签名

c# - ServicePointManager 安全协议(protocol)冲突

c# - IServiceRepository 中的存储库模式 IRepository<T>

c# - 如何编写包含用户名的路由