相关疑难解决方法(0)

可以在C#中动态添加属性吗?

是否可以在运行时添加属性或在运行时更改属性的值?

.net c# attributes

140
推荐指数
4
解决办法
10万
查看次数

装饰类或参数意味着什么?

装饰类或参数意味着什么?
我的目的是什么,我什么时候会这样做?

欢迎链接到资源和直接答案.

谢谢.

c# parameters class

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

动态删除属性的C#属性

我有一组具有一组属性的类如下所示.

class ContactInfo
{
    [ReadOnly(true)]
    [Category("Contact Info")]
    public string Mobile { get; set; }

    [Category("Contact Info")]
    public string Name{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

此类的对象被分配给属性网格,以便用户可以更新现有联系人.你可以看到Mobile被标记为ReadOnly.

但是,当我想添加一个全新的联系人时,我希望用户能够编辑联系人移动设备.为此,我需要在将对象分配给属性网格之前从Type中动态删除Readonly属性.可能吗?

.net c# propertygrid

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

我可以在Castle Windsor中为代理类型定义自定义属性

我有一个类,我用Castle Dynamic Proxy代理它.我想为代理方法添加一些自定义属性(在代理类中没有定义).这可能吗.

我想要这个,因为我想为我的应用程序的服务层生成ASP.NET Web API层.我代理服务(继承自ApiController和其他IMyService接口),它工作得很好,但我想为这个新创建的Dynamic类添加特定于WebAPI的属性,因此Web API框架可以读取它们.

编辑:

如果有人想知道我想要什么,我想详细解释一下.

public interface IMyService
{
    IEnumerable<MyEntity> GetAll();
}

public class MyServiceImpl : IMyService
{
    public IEnumerable<MyEntity> GetAll()
    {
        return new List<MyEntity>(); //TODO: Get from database!
    }
}

public class MyServiceApiController : ApiController,IMyService
{
    private readonly IMyService _myService;

    public MyServiceApiController(IMyService myService)
    {
        _myService = myService;
    }

    public IEnumerable<MyEntity> GetAll()
    {
        return _myService.GetAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

认为我有一个由MyServiceImpl实现的IMyService.我想让一个Api控制器能够从网上使用这项服务.但正如您所见,api控制器只是实际服务的代理.那么,为什么我要写呢?我可以使用城堡windsor动态创建它.

这是我的想法,几乎在我的新项目(https://github.com/hikalkan/aspnetboilerplate)中完成.但是,如果我需要向api控制器的GetAll方法添加一些属性(例如Authorize),该怎么办呢?我不能直接添加,因为没有这样的类,它是城堡动态代理.

所以,除了这个问题.我想知道是否可以向synamic代理类的方法添加属性.

dependency-injection castle-windsor castle castle-dynamicproxy inversion-of-control

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

使用Reflection.Emit覆盖属性定义

我正在尝试使用Reflection.Emit(TypeBuilder)实现此模式:

public class ClassToBeProxied
{
    public virtual object Property1 { get; set; }
}

public class Proxy : ClassToBeProxied
{
    [AttributeToBeAdded]
    public override object Property1
    {
        get
        {
            //do something else to return the object - i.e get it from the database
            return null; //stub
        }
        set
        {
            //do something else to set the object - i.e, save it to a database
        }
    }        
}
Run Code Online (Sandbox Code Playgroud)

如果我所做的只是拦截get和set方法,那么这有效:

PropertyInfo info = typeof(ClassToBeProxied).GetProperty("Property1", BindingFlags.Public | BindingFlags.Instance);
{
    MethodBuilder pGet = typeBuilder.DefineMethod("get_" + info.Name, …
Run Code Online (Sandbox Code Playgroud)

c# reflection.emit

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