小编Geo*_*e R的帖子

结合DI和构造函数参数?

如何将构造函数注入与"手动"构造函数参数组合?即.

public class SomeObject
{
    public SomeObject(IService service, float someValue)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我的DI容器应该解析/注入IService,并且应该指定someValue.我该如何混合这两个?

c# ninject dependency-management

35
推荐指数
3
解决办法
2万
查看次数

EF代码优先为一个DbSet的PluralizingTableNameConvention

如何PluralizingTableNameConvention仅针对单个表/ DbSet 切换此约定?至于我可以告诉大家,我只能做到这一切DbSets对于一个给定DbContext

c# entity-framework-4 entity-framework-4.1

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

鼠标捕获时IsMouseOver

我的元素上有一个IsMouseOver触发器.我还有一个拖动动作正在发生,其中另一个元素捕获鼠标,因此IsMouseOver触发器永远不会发生,但我明确地希望它在某些元素上发生时我拖过它(鼠标捕获和所有).这可能吗?

wpf

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

Ninject与Unity3D

Unity3D使用GameObjects.您可以向这些游戏对象添加组件,其中组件是继承基类的脚本(在c#或js中).Unity本身是用本机代码编写的.组件不能有构造函数,而是使用反射来查找是否有某些命名方法(OnStart,Update等).

我认为我可以做以下事情,而不是让我的眼睛因为缺乏构造函数和其他非常讨厌的东西而流血.

public class SomeGameBehaviour
{
    public SomeGameBehaviour(IGameObject gameObject) { }
}
Run Code Online (Sandbox Code Playgroud)

(Monobehaviour是基类)

public class ComponentWrapper : MonoBehaviour, IGameObject { }
Run Code Online (Sandbox Code Playgroud)

..然后我可以从SomeGameBehaviour获取gameObject.Transform或者你有什么东西,同时将它与Unity强制延迟解耦.

问题:我无法使用默认的注入行为,因为Components/MonoBehaviours没有,也没有构造函数 - 如果你尝试,它会抛出错误,所以我推出了自己的Provider.

public class UnityProvider : IProvider
{
    public object Create(IContext context)
    {
        var go = new GameObject(context.Request.Target.Name, typeof(ComponentWrapper));
        var c = go.GetComponent<ComponentWrapper>();

        return c;
    }

    public Type Type { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以在Unity编辑器中看到游戏对象被创建,并且ComponentWrapper被附加,但是Ninject会向我抛出一个空引用错误,这是我无法弄清楚的.它似乎正在为IGameObject或目标做进一步的事情,这会扰乱这个过程.

NullReferenceException: Object reference not set to an instance of an object
Ninject.Infrastructure.Language.ExtensionsForMemberInfo.GetParentDefinition (System.Reflection.MethodInfo method, BindingFlags flags)
Ninject.Infrastructure.Language.ExtensionsForMemberInfo.GetParentDefinition (System.Reflection.PropertyInfo property)
Ninject.Infrastructure.Language.ExtensionsForMemberInfo.IsDefined (System.Reflection.PropertyInfo …
Run Code Online (Sandbox Code Playgroud)

c# ninject unity-game-engine

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

在 EF Core 中分解结构?

假设我有以下课程:

struct Vector
{
    public float X { get; set; }
    public float Y { get; set; }
    public float Z { get; set; }
}

class Player
{
    public string Name { get; set; }
    public Vector Position { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我如何在实体框架(核心)中配置它,使其映射到 Name、PositionX、PositionY、PositionZ?

这是用于代码生成目的,所以我不希望用户必须在考虑 EF 的情况下创建他们的 POCO(它也可以发送到很多其他语言!)

c# entity-framework

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

嵌套宏扩展

我不确定这是否是正确使用的术语,但是我的问题是宏调用(“PLUGIN_NAME”)作为另一个宏调用(“IMPLMENT_MODULE”)的参数,这反过来将其打印为字符串,打印该参数作为宏调用(“somePLUGIN_NAME”)而不是扩展结果(“someSomePluginName”)。

请注意,“IMPLMENT_MODULE”是一个 API 调用,因此我无法更改它。

#define IMPLEMENT_MODULE(name) something##name

#define PLUGIN_NAME SomePluginName
#define _STR(s) #s
#define STR(s) _STR(s)
#define PLUGIN_NAME_STR STR(PLUGIN_NAME)

int main()
{
    string expected = "somethingSomePluginName";
    string actual = STR(IMPLEMENT_MODULE(PLUGIN_NAME));

    printf("expected: %s || actual: %s\n", expected.c_str(), actual.c_str());
    assert(expected == actual);
}
Run Code Online (Sandbox Code Playgroud)

我把它放在这里: http: //codepad.org/FRzChJtD

c++ macros

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

由于对象的当前状态 - 列表上的Linq,操作无效

在List上运行Linq查询时抛出此错误.

我正在使用带有C#的Unity3D 3.0(Unity3D使用Mono 2.6).据我所知,Unity3D是单线程的.它的工作原理是将继承基类的"脚本"(c#.cs文件)附加到"GameObject".此外,Unity控制脚本的实例化和序列化,因此您不能使用构造函数.

我有一个RoadNetwork脚本,其中包含对RoadNodes和RoadCurves的引用,两者都通过单例定位RoadNetwork并注册/取消注册.我在RoadNode和RoadCurve中安装了"迷你工厂",他们努力将自己挂在游戏对象上.

RoadNode首先检查RoadNetwork,以确保在同一位置还没有节点,通过这样做:

public static RoadNode2 New(float x, float y, float z)
{
    //First try to find an existing one
    var rn = RoadNetwork.Instance.GetNodeAtPosition(new Vector3(x, y, z))
             ?? UnityReferenceHelper.GetNewGameObjectFor<RoadNode2>(
                 "RoadNode_" + (RoadNetwork.Instance.Nodes.Count + 1).ToString("D3"),
                 RoadNetwork.Instance.transform.FindChild("Nodes"));

    rn.Position = new Vector3(x, y, z);

    rn.gameObject.active = true;

    return rn;
}
Run Code Online (Sandbox Code Playgroud)

RoadNetwork中的适当方法是:

public RoadNode2 GetNodeAtPosition(Vector3 position)
{
    var tempList = new List<RoadNode2>();

    return tempList.Single(x => x.Position == position);
}
Run Code Online (Sandbox Code Playgroud)

tempList试图缩小问题范围,但我得到了完全相同的错误.它应该是"Nodes.Single(...",但我怀疑它很重要.如果我直接在New()方法中调用Linq查询,我会得到相同的错误.

所以是的,这个Exception会抛出并指向我的tempList.Single()行.原因是什么?

c# linq unity-game-engine

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

无法将GetTypes()强制转换为接口

我正在扫描特定的命名空间以查找实现接口的类型,并尝试将它们作为该接口返回而不仅仅是Type,但我得到的是InvalidCastException

IEnumerable<IGameScript> GetDemos()
{
    var results = Assembly.GetExecutingAssembly().GetTypes()
        .Where(
        x => x.IsClass 
        && x.Namespace == "MMOClass.CodeBase.Demos" 
        && x.Name.Contains("Demo") 
        && x.GetInterfaces().Contains(typeof(IGameScript))
        ).Select(x => x);

    return results.Cast<IGameScript>();
}
Run Code Online (Sandbox Code Playgroud)

更新以回应里德的回答:

IEnumerable<IGameScript> GetDemos()
{
    var results = Assembly.GetExecutingAssembly().GetTypes()
        .Where(
        x => x.IsClass 
        && x.Namespace == "MMOClass.CodeBase.Demos" 
        && x.Name.Contains("Demo") 
        && x.GetInterfaces().Contains(typeof(IGameScript))
        ).Select(x => Activator.CreateInstance(x) as IGameScript);

    return results;
}
Run Code Online (Sandbox Code Playgroud)

c# reflection

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

JQuery事件处理程序范围

说我有这个(jqueryUI插件):

  $.widget('ui.someplugin', {
    _create: function() {
      return $(this.element).click(this._onClick);
    },
    _onClick: function(e) {
      return this._someFunc();
    },
    _someFunc: function() {
      return console.log('someFunc');
    }
  });
Run Code Online (Sandbox Code Playgroud)

它不起作用 - _onClick接收DOM元素作为其范围.我可以让处理程序再次使用$(e.target).data('someplugin')引用该插件,但如果我想订阅其他DOM元素事件那就没用了.我如何重新调整它以便它能够满足我的需求?

jquery jquery-ui

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

匿名方法返回类型转换

我有一个对象"ConnectableProperty"将一个属性连接到另一个属性,并要求我提供它Func.现在我有2种类型 - Scalar和Color.两者都可以通过显式运算符相互转换.出于某种原因,我不能喂Func<double, double, Scalar>Func<double, double Color>,即使标量可以转换为彩色.这是怎么回事?

为了澄清,我添加了代码.请注意,可连接属性是"输入".输出(可以插入)是具有该签名的方法.

这是ConnectableProperty

public sealed class ConnectableProperty<T> : IEquatable<T>, IGetXY<T> where T : IValue<T>
{
    private T _value;
    public T Value { get { return _value; } set { _value = value; } }

    public INode ParentNode { get; private set; }
    public ValueConnection<T> Connection { get; set; }
    public INode ConnectionFrom { get { return !IsConnected ? null : Connection.FromNode; } }
    public bool IsConnected { get { return …
Run Code Online (Sandbox Code Playgroud)

c# casting anonymous-methods

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

从数组中获取实际类型

鉴于这个例子:

IColor[] items;
items = new IColour[]{ new SomeColour() };
Run Code Online (Sandbox Code Playgroud)

如何使用反射来查看项目,typeof(SomeColour)而不是typeof(IColour)?使用我熟悉的,typeof(items).GetElementType()给我IColour,而不是实际的类型.

c# arrays generics reflection

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