c# - 如何从静态类中解析命名实例?

标签 c# asp.net-mvc-2 ioc-container autofac

有人知道我做错了什么吗?

我有一个这样的静态类:

public static class ApplicationContainer
{
    private static ContainerBuilder builder = null;
    private static IContainer container = null;

    public static void Create()
    {
        builder = new ContainerBuilder();

        builder.RegisterInstance(new Repository<Log>(RepositoryType.Main))
            .As<IRepository<Log>>().SingleInstance()
            .Named("Log", typeof(Repository<Log>));

        container = builder.Build();
    }     

    public static IContainer Container()
    {
        if (container != null) return container;
        throw new Exception("Container is not ready.");
    }
}

在我的 MVC 应用程序的 Global.asax.cs 中,我有:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        ApplicationContainer.Create(); 

        RegisterRoutes(RouteTable.Routes);
    }

现在问题来了:我如何从容器中解析命名实例?

public class DefaultLogger : ILogger
{
    ApplicationContainer.Container().Resolve("Log", typeof(Repository<Log>);// <--- does not work
}

但是当 ApplicationContainer 类不是静态的时,从容器中解析非常好。 我使用 autofac 2.2.4。

最佳答案

我相信您无法编译此代码,因为您缺少 .Resolve(...) 调用的结束符“)”。

就是说,你看过 Autofac ASP.Net integration 了吗?模块?

关于c# - 如何从静态类中解析命名实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369684/

相关文章:

asp.net - 如何使用嵌套 View 模型获取 EditorFor 的数据

asp.net-mvc-2 - ASP.NET MVC 2. 无法创建接口(interface)实例

java - 使用数组元素作为参数实例化对象java

php - 中间件中的 Laravel 依赖注入(inject)

javascript - MVC5 上的掩码输入

c# - WebApi任务由于系统缺少足够的缓冲区空间或队列已满,无法对套接字执行操作

c# - 为什么 bool 在使用传统绑定(bind)时无需转换器就可以实现可见性

c# - 用于保存不同类型列表的泛型设计模式

asp.net-mvc - 即使禁用验证,ASP.NET 请求验证也会出现异常

java - 带有 spring bean 的 MDB 不会从另一个包 Autowiring bean