小编Ste*_*ven的帖子

简单的喷射器将具体类型与生活方式结合起来

我正在寻找一种可以使用指定的生活方式注册具体类型的方法,基本上如下所示。

public void SomeFunction( Type concrete, Lifestyle lifestyle ) =>
    container.Register( concrete, lifestyle );
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection simple-injector

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

Ninject中.Resolve和.Get之间的区别

只是想对ninject中Kernel.Resolve和Kernel.Get之间的区别做一些澄清.

Kernel.Get状态的描述

通过使用与指定约束匹配的第一个绑定来获取指定服务的实例

Kernel.Resolve状态的描述

解析指定请求的实例.在消费者迭代枚举之前,实际上并未解析实例.

您可以在哪些情况下使用其中任何一种?(现在我正在使用Get)

ninject

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

参数名称:root 不能为 Null 异常 Ninject

我在代码重构后收到来自 Ninject 的异常。因此我知道是什么导致了错误,但无法确定原因。代码编译文件,但我从 Ninject 收到运行时错误:

不能为空参数名:root

我正在尝试注入一个类的常量实例:

var subscriptionApiClientHelper = new SubscriptionApiClientHelper(AppSettings.Get<string>("AdminAPIUrl"),
            AppSettings.Get<string>("APIV2Key"), Kernel.Get<ICache>());

kernel.Bind<SubscriptionApiClientHelper>().ToConstant(subscriptionApiClientHelper);
Run Code Online (Sandbox Code Playgroud)

Ninject 在第一行抛出异常。

我的类 SubscriptionApiClientHelper 继承自另一个类(在 Nuget 包中引用),因此:

public SubscriptionApiClientHelper(string baseUrl, string apiKey, ICache cache) : base(baseUrl, apiKey)
{
     _cache = cache;
}
Run Code Online (Sandbox Code Playgroud)

其构造函数是这样的:

 public SubscriptionApiClient(string baseUrl, string apiKey)
 {
     _baseUrl = baseUrl;
     _apiKey = apiKey;
 }
Run Code Online (Sandbox Code Playgroud)

这个基类中的几个方法被覆盖并实现了缓存,因此覆盖的原因是我不需要在基类的所有方法上实现缓存。我从同一个 Nuget 包中注入了一些其他类,但没有问题,但这些没有我怀疑导致问题的继承。注意我成功地注入并使用了我继承的基类(SubscriptionApiClient),它只是导致问题的辅助类。

这是完整的堆栈跟踪:

at Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root, Type service, Func`2 constraint, IEnumerable`1 parameters, Boolean isOptional, Boolean isUnique)
at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters)
at AdminPortal.NinjectWebCommon.RegisterServices(IKernel kernel) …
Run Code Online (Sandbox Code Playgroud)

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

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

如何在Startup.cs中注册Generic类型的接口

我在ASP.NET Core中使用WebAPI.

这有效:

services.AddScoped<IApiKeysService, APIKeysService>();
Run Code Online (Sandbox Code Playgroud)

现在接口返回泛型类型T这不是

services.AddScoped<IApiKeysService>();
Run Code Online (Sandbox Code Playgroud)

错误使用泛型类型blah需要1种类型的参数

或这个

services.AddScoped<IApiKeysService<T>>();
Run Code Online (Sandbox Code Playgroud)

我得到以下编译错误

无法找到类型或命名空间T.

我该如何注册Startup.cs

注意:我不能使用具体类型,因为接口成员是具有泛型方法的基类.

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

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

如何确定在 Simple Injector 中使用哪种生活方式

我的应用程序使用实体框架。由于我希望DbContext在单个请求中重用my ,因此我将其注册为Lifestyle.Scoped,如下所示:

container.Register<MyDbContext>(Lifestyle.Scoped);
Run Code Online (Sandbox Code Playgroud)

其他类得到这个MyDbContext注入。例如,请参阅以下存储库:

应用程序库是:

public class ApplicationsRepository : IApplicationsRepository
{
    private readonly MyDbContext _dbContext;

    public ApplicationsRepository(MyDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public void Save()
    {
        _dbContext.Save();
    }

    public Application GetByName(string appName)
    {
        var dbApplication = _dbContext.APPLICATIONS.FirstOrDefault(a => a.NAME == appName);

        return ApplicationMapper.MapApplicationFromAPPLICATIONS(dbApplication);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是还有无数其他类依赖于MyDbContext. 其他类可能不MyDbContext直接依赖,但会注入一个依赖于MyDbContext.

我的问题是:我应该为这些课程使用什么样的生活方式管理以及如何实施?

c# dependency-injection ioc-container simple-injector

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

将实体框架核心DbContext池与简单注入器一起使用

查看有关如何使用数据库上下文池的示例,我发现它是设计用于ServiceCollection

var serviceProvider = new ServiceCollection()
    .AddDbContextPool<AdventureWorksContext>(options => { //options })
    .BuildServiceProvider();
Run Code Online (Sandbox Code Playgroud)

但是简单注入器呢?是否可以在Simple Injector容器中注册数据库池?

ps我的应用不是ASP.NET MVC,只是DAL

simple-injector dbcontext entity-framework-core ef-core-2.1

2
推荐指数
2
解决办法
1672
查看次数

LINQ to SQL自动生成的存储过程类型

我有以下存储过程

ALTER PROCEDURE [dbo].Test
AS
BEGIN
    CREATE TABLE ##table
    (
        ID1 int,
        ID2 int
    )

    DECLARE @query varchar(MAX);

    INSERT INTO ##table VALUES(1, 1);

    SELECT * FROM ##table;
END
Run Code Online (Sandbox Code Playgroud)

我尝试从C#代码中使用它.我使用LINQ to SQL作为O/RM.当我将过程添加到DataBaseContext时,它说它无法弄清楚此过程的返回值.如何修改存储过程以便我可以将它与LINQ to SQL一起使用.

注意:我需要有全局模板表!

c# stored-procedures sql-server-2005 linq-to-sql

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

使用工作单元装饰特定的命令处理程序

我试图将我的应用程序从服务模式重写为命令和查询模式(在我转移到CQRS之前).目前我被困在这个博客上.

它显示了他将工作单元提交从base命令转移到a中的位置PostCommitCommandHandlerDecorator,然后使用Simple Injector将它们绑定起来.作者还指出,并非所有命令都需要使用工作单元,这在我的情况下是正确的,因为不是每个命令都与数据库对话,而是有些发送电子邮件等.

如何构建我的命令和绑定,使得只有那些需要包含在工作单元提交中的命令才会被IoC容器绑定?

c# dependency-injection cqrs simple-injector

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

Unity场景旋转箭头突然丢失

如何启用允许我在开发过程中旋转场景的场景(场景Gizmo),这是位于场景右上角的场景.当我点击它来改变视图的位置但是它一直工作到现在为止它突然消失了.有人可以告诉我解决这个问题吗?

谢谢

unity-game-engine

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

(Unity 2D)当它离开屏幕时销毁实例化的预制件?

林做一个2D游戏在Unity 2D(4.3),我需要销毁时,这些组合屋去关闭屏幕实例化的组合屋.我已经编写了一些代码来生成Objects,但是当我们离开屏幕时我想要删除那些预制件.这是我到目前为止编写的代码.

要生成预制件(C#):

void Update () {
    float y = Random.Range(-4.53f, 2.207f);
    if(x < 2000) {
        Instantiate(obstacle, new Vector3(y, x * 6.0f, 0),Quaternion.identity);
        x++;
    }
    //Debug.Log(x);

}
Run Code Online (Sandbox Code Playgroud)

要销毁预制件(C#):

    /*************************************************************************************************
     * GET INSTANTIATED OBSTACLE
     * AND DESTROY IT ON EXIT
     * TO SAVE MEMORY
    **************************************************************************************************/
    GameObject clone = (GameObject)Instantiate (obstacle);

    /*if(clone.transform.position.y == -11)
    {
        Destroy(clone);
        Debug.Log("Destroy");
    }*/

    Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
    if (screenPosition.y > Screen.height || screenPosition.y < 0)
    {
        Destroy(gameObject);
        Debug.Log("Destroy");
    }
Run Code Online (Sandbox Code Playgroud)

但是,销毁对象的代码不起作用,但也没有出现错误.在预制件离开屏幕后输出"Destroy",所以我知道破坏它们的代码有问题.

谢谢

c# android unity-game-engine destroy

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