关于C#:如何在Autofac上注册单例

How to register singleton on Autofac

我在.Net Core 2.0 Web应用程序中使用Autofac进行依赖项注入。 我是Autofac和依赖项注入概念的新手。

现在,我想在DI中注册一个单例并在DI容器中解析它。

C#代码[接口]

1
2
3
4
public interface IMongoDbContext
    {
        IMongoDatabase Database { get; }
    }

1
2
3
4
5
6
7
8
public class MongoDbContext : IMongoDbContext
    {
        public MongoDbContext(string connectionString, string databaseName);

        public string DatabaseName { get; }
        public IMongoDatabase Database { get; }
        public string ConnectionString { get; }
    }

储存库类

1
2
3
4
5
6
7
public class DemoRepository : IDemoRepository
{
    public DemoRepository(IMongoDataContext context)
    {

    }
}

现在,在.Autofac中

1
2
3
4
5
6
    builder.Register(c => new MongoDbContext(dbConnectionString, dataBaseName)).As<IMongoDbContext>().SingleInstance();
    //dbConnectionString and dataBaseName are string variables declared above.

    // and then to Resolve it
    builder.Register(c => new DemoRepository(c.Resolve<IMongoDbContext>)).As<IDemoRepository>();
// but in above line it shows error at `c.Resolve<IMongoDbContext>`  it shows `cannot convert from 'method group' to 'IMongoDbContext'`

谁能帮我解决这个问题。 我是autofac和依赖注入的新手,我想知道如何在autofac中注册Singleton。

任何帮助将不胜感激...!

谢谢


1
c.Resolve<IMongoDbContext>

应该:

1
c.Resolve<IMongoDbContext>()

您忘记了调用/调用函数。


我不知道为什么在注册DemoRepository时为什么要手动注入IMongoDataContext。 这不是控制工具反转的主要目的吗? 我认为,您应该改变自己的方法。

1
builder.RegisterType<DemoRepository>().As<IDemoRepository>();