Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 重视解决时间?非常感谢您的回答。实际上,我希望终端程序员在解析时间传递参数值。有可能吗?对不起,我又错了,你的解决方案。我如何解决问题?我错了什么?@minamorsaliIConnectionStringProvider注册为InstancePerDep_Entity Framework_Repository_Autofac_Unit Of Work - Fatal编程技术网

Entity framework 重视解决时间?非常感谢您的回答。实际上,我希望终端程序员在解析时间传递参数值。有可能吗?对不起,我又错了,你的解决方案。我如何解决问题?我错了什么?@minamorsaliIConnectionStringProvider注册为InstancePerDep

Entity framework 重视解决时间?非常感谢您的回答。实际上,我希望终端程序员在解析时间传递参数值。有可能吗?对不起,我又错了,你的解决方案。我如何解决问题?我错了什么?@minamorsaliIConnectionStringProvider注册为InstancePerDep,entity-framework,repository,autofac,unit-of-work,Entity Framework,Repository,Autofac,Unit Of Work,重视解决时间?非常感谢您的回答。实际上,我希望终端程序员在解析时间传递参数值。有可能吗?对不起,我又错了,你的解决方案。我如何解决问题?我错了什么?@minamorsaliIConnectionStringProvider注册为InstancePerDependency。每次解析它时,都会有一个新实例。因此,您修改的实例与通过DbContext解析的实例不同。为了共享实例,您必须使用InstancePerLifetimeScope声明它。在我有一个Autofac模块类来注册我的类等情况下,伟大的


重视解决时间?非常感谢您的回答。实际上,我希望终端程序员在解析时间传递参数值。有可能吗?对不起,我又错了,你的解决方案。我如何解决问题?我错了什么?@minamorsali
IConnectionStringProvider
注册为
InstancePerDependency
。每次解析它时,都会有一个新实例。因此,您修改的实例与通过
DbContext
解析的实例不同。为了共享实例,您必须使用
InstancePerLifetimeScope
声明它。在我有一个Autofac模块类来注册我的类等情况下,伟大的回答帮助了我。我的EfCore有问题,所以我首先需要创建DbContextOptions对象,然后使用.WithParameter函数来传递选项参数。
public class UnitOfWork : IUnitOfWork
{
    private readonly DbContext _context;

    public UnitOfWork(DbContext context)
    {
        _context = context;

        Contact = new ContractRepository(context);
    }

    public void Dispose()
    {
        _context.Dispose();
        GC.SuppressFinalize(_context);
    }

    public IContactRepository Contact { get; private set; }

    public int Complete()
    {
        return _context.SaveChanges();
    }
}
public class Repository<Entity> : IRepository<Entity> where Entity : class
{
    protected readonly DbContext _noteBookContext;
    public Repository(DbContext noteBookContext)
    {
        _noteBookContext = noteBookContext;
    }
    public void Add(Entity entity)
    {
        _noteBookContext.Set<Entity>().Add(entity);
    }
}
public  class ContractRepository: Repository<Contact>,IContactRepository 
{
    public ContractRepository(DbContext noteBookContext) : base(noteBookContext)
    {

    }

    public DbContext NotebookContext
    {
        get
        {
            return _noteBookContext;
        }
    }
}
public class NoteBookContext:DbContext
{
    public NoteBookContext(string connectionstring):base(connectionstring)
    {

    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ContactConfig());
        modelBuilder.Configurations.Add(new PhoneConfig());
        modelBuilder.Configurations.Add(new PhoneTypeConfig());
        modelBuilder.Configurations.Add(new GroupConfig());
        base.OnModelCreating(modelBuilder);
    }
    public DbSet<Contact> Contacts { get; set; }
    public DbSet<Phone> Phones { get; set; }

    public DbSet<Group> Groups { get; set; }

    public DbSet<PhoneType> PhoneTypes { get; set; }
}
var uow = new UnitOfWork(new NotebookdbContext("connectionstring"));
var builder = new ContainerBuilder();
builder.RegisterType<NoteBookContext>()
       .As<DbContext>();
builder.RegisterType<UnitOfWork>()
       .UsingConstructor(typeof(DbContext))
       .As<IUnitOfWork>();

builder.RegisterGeneric(typeof(Repository<>))
       .As(typeof(IRepository<>))
       .InstancePerLifetimeScope();

Container container = builder.Build();
 var builder = new ContainerBuilder();
        builder.RegisterType<ConnectionStringProvider>().As<IConnectionStringProvider>();
        builder.RegisterType<NoteBookContext>().As<DbContext>().WithParameter((pi, c) => pi.Name == "connectionstring",
                                                                              (pi, c) => c.Resolve<IConnectionStringProvider>().ConnectionString);
        builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().WithParameter(ResolvedParameter.ForNamed<DbContext>("connectionstring"));
        builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
using (var scope = DependencyInjection.Container.BeginLifetimeScope())
        {
            var ConnectionString = scope.Resolve<IConnectionStringProvider>();
            ConnectionString.ConnectionString = "Context";

            var uw = scope.Resolve<IUnitOfWork>();
            var a =uw.Contact.GetAll();

        }
//Make DbContext per request, if your app is web app (which has http request).
builder.RegisterType<NoteBookContext>()
       .As<DbContext>().WithParameter("connectionstring","ConnectionStringValue").InstancePerLifetimeScope();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope();

builder.RegisterGeneric(typeof(Repository<>))
       .As(typeof(IRepository<>))
       .InstancePerLifetimeScope();

Container = builder.Build();
builder.RegisterType<NoteBookContext>()
       .As<DbContext>()
       .WithParameter("connectionstring", "XXX");
public interface IConnectionStringProvider
{
    public String ConnectionString { get; }
}
builder.RegisterType<ConnectionStringProvider>()
       .As<IConnectionStringProvider>()
       .InstancePerLifetimeScope(); 
builder.RegisterType<NoteBookContext>()
       .As<DbContext>()
       .WithParameter((pi, c) => pi.Name == "connectionstring", 
                      (pi, c) => c.Resolve<IConnectionStringProvider>().ConnectionString)
       .InstancePerLifetimeScope();
public class NoteBookContext:DbContext
{
    //Change connectionstring below with the name of your connection string in web.config
    public NoteBookContext():base("name=connectionstring")
    {

    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ContactConfig());
        modelBuilder.Configurations.Add(new PhoneConfig());
        modelBuilder.Configurations.Add(new PhoneTypeConfig());
        modelBuilder.Configurations.Add(new GroupConfig());
        base.OnModelCreating(modelBuilder);
    }
    public DbSet<Contact> Contacts { get; set; }
    public DbSet<Phone> Phones { get; set; }

    public DbSet<Group> Groups { get; set; }

    public DbSet<PhoneType> PhoneTypes { get; set; }
}
var builder = new ContainerBuilder();
builder.RegisterType<NoteBookContext>()
       .As<DbContext>()
       .InstancePerLifetimeScope();

builder.RegisterType<UnitOfWork>()
       .As<IUnitOfWork>()
       .InstancePerLifetimeScope();

builder.RegisterGeneric(typeof(Repository<>))
       .As(typeof(IRepository<>))
       .InstancePerLifetimeScope();

Container container = builder.Build();