小编kal*_*ies的帖子

模型类(实体)中的依赖注入

我正在使用Entity Framework Code-First构建ASP.NET Core MVC应用程序.我选择实现一个简单的存储库模式,为我创建的所有模型类提供基本的CRUD操作.我选择遵循http://docs.asp.net中提供的所有建议,DI就是其中之一.

在.NET 5中,依赖注入非常适用于我们不直接实例化的任何类(例如:控制器,数据存储库,......).

我们只是通过构造函数注入它们,并在应用程序的Startup类中注册映射:

// Some repository class
public class MyRepository : IMyRepository
{
    private readonly IMyDependency _myDependency;
    public MyRepository(IMyDependency myDependency)
    {
        _myDependency = myDependency;
    }
}

// In startup.cs :
services.AddScoped<IMyDependency, MyDependency>();
services.AddScoped<IMyRepository, MyRepository>();
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,在我的一些模型类中,我想注入一些我声明的依赖项.

但我认为我不能使用构造函数注入模式,因为模型类通常是明确地实现的,因此,我需要为自己提供依赖项,我不能.

所以我的问题是:是否有另一种方式比构造函数注入注入依赖项,以及如何?我是在考虑一个属性模式或类似的东西.

c# dependency-injection asp.net-core

14
推荐指数
3
解决办法
8704
查看次数

删除ASP.Net核心依赖注入中的服务

在Asp.Net MVC Core(早期版本,版本1.0或1.1)中,依赖注入绑定在Startup.cs类中配置如下:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IMyService, MyService>();
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我通常有一个基本的Startup类,其中泛型绑定被定义为这些行的序列:

public abstract class BaseStartup
{
    public virtual void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IMyService1, MyService1>();
        services.AddScoped<IMyService2, MyService2>();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的应用程序中,我继承了启动类,并注入了其他服务:

public class Startup : BaseStartup
{
    public override void ConfigureServices(IServiceCollection services)
    {
        base.ConfigureServices(services);

        services.AddScoped<IMyService3, MyService3>();
        services.AddScoped<IMyService4, MyService4>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在想知道:我怎样才能"覆盖"以前的绑定?例如,我希望删除或修改基类中定义的绑定,如:

services.Remove<IMyService1>(); // Doesn't exist
services.AddScoped<IMyService1, MyBetterService1>();
Run Code Online (Sandbox Code Playgroud)

或者只是更新绑定:

services.AddScoped<IMyService1, MyBetterService1>(replacePreviousBinding: true); // Doesn't exist either !
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点 ?或者只是简单地声明一个与之前定义的绑定相同的接口的新绑定将覆盖该绑定?

c# asp.net-mvc dependency-injection asp.net-core-mvc

10
推荐指数
1
解决办法
7042
查看次数

在其图中附加具有现有和新实体混合的实体(Entity Framework Core 1.1.0)

将附加实体的实体附加到现有实体时,我遇到了一个问题(我将现有实体称为数据库中已存在的实体,并正确设置了PK).

问题是使用Entity Framework Core 1.1.0时.这与Entity Framework 7(Entity Framework Core的初始名称)完美配合.

我没有尝试使用EF6或EF Core 1.0.0.

我想知道这是回归,还是故意改变行为.

该模型

该试验模型在于Place,Person和许多一对多通过命名的连接实体广场和人之间的关系PlacePerson.

public abstract class BaseEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Person : BaseEntity
{
    public int? StatusId { get; set; }
    public Status Status { get; set; }
    public List<PersonPlace> PersonPlaceCollection { get; set; } = new List<PersonPlace>();
}

public class Place : BaseEntity
{
    public List<PersonPlace> …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-core

9
推荐指数
1
解决办法
2664
查看次数

UIView中的UISegmentedControl不响应change事件

我已经在iOS7 SDK上以编程方式创建了一个基本应用程序:

  1. 创建了两个UINavigationController
  2. 为每个人添加了一个视图
  3. 创建了一个包含两个项目的UITabBarController
  4. 将每个UINavigationController添加到其各自的UITabBarController中

这工作正常,一切都以编程方式完成.我的项目只包含一个简单的窗口应用程序模板,没有任何xib或故事板,一切都在我的AppDelegate.m的应用程序didFinishLaunchingWithOptions中完成.

我试图添加一个UISegmentedControl(仍以编程方式)作为第一个UINavigationController视图的子视图,如下所示:

// First navigation controller
UINavigationController *firstNavController = [[UINavigationController alloc] init];
firstNavController.navigationBar.barTintColor = [UIColor redColor];
firstNavController.title = @"First";
firstNavController.navigationBar.topItem.title = @"First top";
firstNavController.tabBarItem.image = [UIImage imageNamed:@"FirstTab"];

// First view
UIView *firstView = [[UIView alloc] init];
firstView.backgroundColor = [UIColor yellowColor];

// Add a segmented control to this view
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
            [NSArray arrayWithObjects:@"One", @"Two", nil]];
// Register an event handler
[segmentedControl addTarget:self action:@selector(segmentedControlSelectedIndexDidChange:)
           forControlEvents:UIControlEventValueChanged];
// Shape it and select …
Run Code Online (Sandbox Code Playgroud)

objective-c uisegmentedcontrol uiview ios ios7

1
推荐指数
1
解决办法
1600
查看次数