如何在Autofac中注册单例

3

我正在使用.Net Core 2.0Autofac进行依赖注入。我对Autofac和依赖注入概念还不太了解。

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

C#代码[接口]

public interface IMongoDbContext
    {
        IMongoDatabase Database { get; }
    }

public class MongoDbContext : IMongoDbContext
    {
        public MongoDbContext(string connectionString, string databaseName);

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

仓库类

public class DemoRepository : IDemoRepository
{
    public DemoRepository(IMongoDataContext context)
    {

    }
}

现在,在 .Autofac 中,
    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>处显示错误。错误是什么? - mjwills
@mjwills - 它显示无法将'method group'转换为'IMongoDbContext' - prog1011
2
可能是重复的问题:无法将方法组转换为对象 - C# - mjwills
3个回答

4
c.Resolve<IMongoDbContext>

should be:

c.Resolve<IMongoDbContext>()

你忘记调用函数。


1
我无法理解为什么在注册DemoRepository时需要手动注入IMongoDataContext。这不是控制反转工具的主要目的吗?我认为你应该改变你的方法;
builder.RegisterType<DemoRepository>().As<IDemoRepository>();

0

你可以使用注册类型来包含单个实例

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接