C# 我们如何在一个项目中添加实体框架,并在另一个项目中将其用作服务?
我希望一个项目有EntityFrameworkNuGet包,而其他项目只是在启动时用他们的模型名称注册这个服务。我见过这种方法的mongo版本,但我找不到任何ef版本。 mongo示例: 在役项目:C# 我们如何在一个项目中添加实体框架,并在另一个项目中将其用作服务?,c#,entity-framework,microservices,C#,Entity Framework,Microservices,我希望一个项目有EntityFrameworkNuGet包,而其他项目只是在启动时用他们的模型名称注册这个服务。我见过这种方法的mongo版本,但我找不到任何ef版本。 mongo示例: 在役项目: using Autofac; using DShop.Common.Types; using Microsoft.Extensions.Configuration; using MongoDB.Driver; namespace DShop.Common.Mongo { public stati
using Autofac;
using DShop.Common.Types;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
namespace DShop.Common.Mongo
{
public static class Extensions
{
public static void AddMongo(this ContainerBuilder builder)
{
builder.Register(context =>
{
var configuration = context.Resolve<IConfiguration>();
var options = configuration.GetOptions<MongoDbOptions>("mongo");
return options;
}).SingleInstance();
builder.Register(context =>
{
var options = context.Resolve<MongoDbOptions>();
return new MongoClient(options.ConnectionString);
}).SingleInstance();
builder.Register(context =>
{
var options = context.Resolve<MongoDbOptions>();
var client = context.Resolve<MongoClient>();
return client.GetDatabase(options.Database);
}).InstancePerLifetimeScope();
builder.RegisterType<MongoDbInitializer>()
.As<IMongoDbInitializer>()
.InstancePerLifetimeScope();
builder.RegisterType<MongoDbSeeder>()
.As<IMongoDbSeeder>()
.InstancePerLifetimeScope();
}
public static void AddMongoRepository<TEntity>(this ContainerBuilder builder, string collectionName)
where TEntity : IIdentifiable
=> builder.Register(ctx => new MongoRepository<TEntity>(ctx.Resolve<IMongoDatabase>(), collectionName))
.As<IMongoRepository<TEntity>>()
.InstancePerLifetimeScope();
}
}
使用Autofac;
使用DShop.Common.Types;
使用Microsoft.Extensions.Configuration;
使用MongoDB.Driver;
命名空间DShop.Common.Mongo
{
公共静态类扩展
{
公共静态void AddMongo(此ContainerBuilder生成器)
{
builder.Register(上下文=>
{
var配置=context.Resolve();
var options=configuration.GetOptions(“mongo”);
返回选项;
}).SingleInstance();
builder.Register(上下文=>
{
var options=context.Resolve();
返回新的MongoClient(options.ConnectionString);
}).SingleInstance();
builder.Register(上下文=>
{
var options=context.Resolve();
var client=context.Resolve();
返回client.GetDatabase(options.Database);
}).InstancePerLifetimeScope();
builder.RegisterType()
.As()
.InstancePerLifetimeScope();
builder.RegisterType()
.As()
.InstancePerLifetimeScope();
}
公共静态void AddMongoRepository(此ContainerBuilder生成器,字符串集合名称)
地点:可识别
=>builder.Register(ctx=>newmongorepository(ctx.Resolve(),collectionName))
.As()
.InstancePerLifetimeScope();
}
}
在启动web项目时:
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(Assembly.GetEntryAssembly())
.AsImplementedInterfaces();
builder.Populate(services);
builder.AddMongo();
builder.AddMongoRepository<Cart>("Carts");
builder.AddMongoRepository<Customer>("Customers");
builder.AddMongoRepository<Product>("Products");
Container = builder.Build();
var builder=newcontainerbuilder();
builder.RegisterAssemblyTypes(Assembly.GetEntryAssembly())
.a实现接口();
建造商。填充(服务);
builder.AddMongo();
建造商:AddMongoRepository(“Carts”);
建造商:AddMongoRepository(“客户”);
建造商:AddMongoRepository(“产品”);
Container=builder.Build();
如果您正在创建web应用程序、测试项目、DAL项目等,则通常的解决方案具有多个项目,如web项目。我创建了一个示例,向您展示如何在同一个解决方案中连接项目
EntityFramework
部分EntityFramework
Dependecies=>addreference
,然后选择EntityFramework项目Startup.cs
,使用EntityFramework添加命名空间带有EntityFramework
名称的类库的code>
services.AddDbContext<YourContext>(options => options
.UseSqlServer(Configuration
.GetConnectionString("DefaultConnectionString")));
services.AddDbContext(选项=>options
.UseSqlServer(配置
.GetConnectionString(“DefaultConnectionString”);
使用相同的方法,您可以连接多个项目。您好,谢谢您的回答,但我不希望在web项目中创建DbContext,并在启动和实体框架项目中传递模型,为每个项目自定义DbContext本身。