标签: fluent-interface

monad是否具有流畅的界面?

请原谅我,如果这个问题看起来很愚蠢,但我对整个函数式编程世界都很陌生,所以我需要在StackOverflow上使用一些居民来让我直截了当.

从我收集的内容来看,对monad的操作会返回monad.这是否意味着monad具有流畅的接口,其中应用于monad的每个函数在将一些操作应用于它包装的变量之后返回该monad?

monads functional-programming fluent-interface

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

继承EF代码优先

我有一个基础对象,我不希望在DB中作为一个实体映射,我只希望将属性添加到DB中映射的对象:

没有映射的对象(不知道它是否重要但是baseobject在另一个程序集中):

public class BaseObject
{
    public virtual string Prop1 { get; set; }
    public virtual string Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

映射对象:

public class ChildObject : BaseObject
{
    public virtual string Prop3 { get; set; }
    public virtual string Prop4 { get; set; }
    public virtual string Prop5 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

什么在DbContext中注册

  public DbSet<ChildObject> ChildObjects { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想在Db看到什么

table:ChildObject 
    col:Prop1 (from BaseObject)
    col:Prop2 (from BaseObject)
    col:Prop3 
    col:Prop4 
    col:Prop5
Run Code Online (Sandbox Code Playgroud)

要恢复,我想要做的是在Db中有一个具有子项和基本属性的表.

这是我目前得到的错误:

未映射类型"namespace.ChildObject".使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型.验证类型是否已定义为类,不是原始类,嵌套类还是通用类,并且不从EntityObject继承.

我一直在挖,但找不到怎么做.

有任何想法吗?

编辑: …

.net c# entity-framework fluent-interface code-first

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

C#中的流畅接口

我有一个流畅的界面问题.

我们有一些对象用作SQL接口的参数对象,这是一个例子:

using (DatabaseCommand cmd = conn.CreateCommand(
    "SELECT A, B, C FROM tablename WHERE ID = :ID",
    SqlParameter.Int32(":ID", 1234)))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

对于其中一些参数,我想启用一些专门的选项,但不是向Int32方法添加更多属性(这只是其中之一),我想我会研究流畅的接口.

这是我添加了我正在研究的内容的示例:

SqlParameter.Int32(":ID", 1234).With(SqlParameterOption
    .Substitute
    .Precision(15)
)
Run Code Online (Sandbox Code Playgroud)

我知道这两种选择对于这种类型的参数没有意义,但这不是问题所在.

在上面的例子中,Substitute必须是SqlParameterOption类的静态属性(或者我只是添加一些括号的方法),而Precision必须是实例方法.

如果我重新排序它会怎么样?

SqlParameter.Int32(":ID", 1234).With(SqlParameterOption
    .Precision(15)
    .Substitute
)
Run Code Online (Sandbox Code Playgroud)

那么Substitute就必须是实例属性而Precision是静态方法.这当然不会编译,我不能同时拥有静态和非静态属性或方法.

我该怎么做呢?我在这里走错了路吗?

在重读这个问题时,我有一个想法,下面这个不同的语法会更有意义吗?

SqlParameter.Int32(":ID", 1234).With
    .Precision(15)
    .Substitute
Run Code Online (Sandbox Code Playgroud)

在这种情况下,两者都是返回的实例方法,这将是SqlParameter选项的专用类或接口,如下所示.我不确定是否要转储.With部分,因为这会暴露对象的所有方法,而不仅仅是流利的方法.

建议和一些好的网址将是最受欢迎的,我已经仔细研究了许多例子,但他们倾向于展示这样的例子:

order
    .AddFreeShipping()
    .IncludeItem(15)
        .SuppressTax();
Run Code Online (Sandbox Code Playgroud)

(从这个页面解除)


编辑:来自@marxidad的回复后的跟进:

class SqlParameterOption
{
    public SqlParameterOption Precision(int p) {/* ... */; return this;}
    public SqlParameterOption Substitute() {/* ... …
Run Code Online (Sandbox Code Playgroud)

c# fluent-interface

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

PHP OOP:可链接对象?

我试图在PHP中找到关于可链接OOP对象的一个​​很好的介绍,但还没有任何好的结果.

这样的事情怎么办?

$this->className->add('1','value');
$this->className->type('string');
$this->classname->doStuff();
Run Code Online (Sandbox Code Playgroud)

甚至: $this->className->add('1','value')->type('string')->doStuff();

非常感谢!

php oop fluent-interface chainable

8
推荐指数
3
解决办法
626
查看次数

实体框架代码首先使用Fluent API映射外键

我的情况是用户可以拥有多个地址.因此,我的用户类上有一个ICollection.但我也希望用户能够选择默认地址.所以我做了以下事情:

public class User 
{
    public int Id { get; set; }
    public int? DefaultAddressId { get; set; }
    [ForeignKey("DefaultAddressId")]
    public virtual Address DefaultAddress { get; set; }
    public virtual ICollection<Address> Addresses { get; set; }
    //properties were removed for purpose of this post
}
Run Code Online (Sandbox Code Playgroud)

我想public virtual Address DefaultAddress { get; set; }完全删除,保留DefaultAddressId并使用Fluent API映射它,因为当前的设置导致了很多麻烦(在这个和其他我有类似设置的类中).那么可以使用流畅的api来完成吗?

更新: 地址类当前没有对User类的任何引用,它是一个单向关系.但是,是的,一个地址只属于一个用户,它不是一个多对多的关系.这是地址类:

public class Address
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Details { …
Run Code Online (Sandbox Code Playgroud)

entity-framework fluent-interface ef-code-first entity-framework-4.1

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

你如何使用Castle Windsor - Fluent Interface来注册通用接口?

Castle Windsor刚刚推出了一个用于注册组件的Fluent接口,作为在配置文件中使用XML的替代方法.如何使用此Fluent界面注册Generic界面

为了说明,我有:

public interface IFoo<T,U>
{    
  public T IToo();   
  public U ISeeU(); 
}
Run Code Online (Sandbox Code Playgroud)

这是由一个名为Foo的类实现的.现在,如果我想注册这个,我会做...

var _container = new WindsorContainer();
_container.Register(...);
Run Code Online (Sandbox Code Playgroud)

如何进行注册?执行非通用接口的过程不起作用.

c# castle-windsor fluent-interface castle ioc-container

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

EF Code First - Fluent API(WithRequiredDependent和WithRequiredPrincipal)

我有以下课程:

public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Couple Couple { get; set; }
}

public class Couple
{
    public Guid Id { get; set; }
    public User Groom { get; set; }
    public User Bride { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

重点:

  1. BrideGroom属性是必需的
  2. 一对一的关系
  3. User课堂上,这是Couple必需的

OnModelCreating中的DbContext

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredPrincipal();
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent();
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent();
Run Code Online (Sandbox Code Playgroud)

但我不能被要求!

所有文件在数据库中都为null!

如何将数据库中的字段设为非空? 如果可能,使用API​​ Flient.

entity-relationship fluent-interface ef-code-first

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

递归通用和流畅的接口

TL;博士

尝试实现一个层次流畅的界面,这样我就可以组合节点子类,同时也可以独立于类,但是获取类型参数不在其绑定错误范围内.

细节

我正在尝试实现一个解决方案,以便我可以创建一些类似于以下内容的东西:

farm
    .animal()
        .cat()
            .meow()
            .findsHuman()
                .saysHello()
                .done()
            .done()
        .dog()
            .bark()
            .chacesCar()
            .findsHuman()
                .saysHello()
                .done()
            .done()
        .done()
    .human()
        .saysHello()
        .done();
Run Code Online (Sandbox Code Playgroud)

同时也能做到:

Human human = new Human()
    .saysHello()
Run Code Online (Sandbox Code Playgroud)

我已经接近使用各种策略,但未能获得所描述的灵活性.

我当前的尝试使用以下类:

abstract class Base<T extends Base<T>>{

    private T parent;

    Base(){

    }

    Base( T parent ){
        this.parent = parent;
    }

    public T done() throws NullPointerException{
        if ( parent != null ){
            return (T) parent;
        }

        throw new NullPointerException();
    }   
}

class Farm<T extends Base<T>> extends Base{

    private Animal<Farm<T>> …
Run Code Online (Sandbox Code Playgroud)

java generics fluent-interface nested-generics

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

如何在C#中创建Fluent接口,对某些方法有一些限制?

见下面的代码:

new ConditionCreator()
       .Add()
             .Or()
       .Add()
             .And()
       .Add()
Run Code Online (Sandbox Code Playgroud)

我想为此创建一个Fluent接口但是我需要,在Add()方法开发人员看到Only Or()或And()之后,在其中一个之后,请参阅Only Add()方法.

所以没有人可以编写如下代码:

new ConditionCreator()
           .Add()
           .Add()
           .Add()
           .Or()
           .And()
           .Add()
           .And()
           .And()
Run Code Online (Sandbox Code Playgroud)

我希望有一些限制,一些方法可以接受特殊的方法等.我可以在一个类中编写所有方法,并为每一个返回这个,但这是不合适的!

请指导我如何编写Advanced Fluent Interface类.

c# fluent-interface method-chaining

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

无法使用FluentEmail在电子邮件中发送嵌入图像

我在ASP.NET核心2.0类库中使用FluentEmail,它将发送电子邮件通知.

下面是我到目前为止尝试过的示例代码:

using FluentEmail.Core;
using FluentEmail.Razor;
using FluentEmail.Smtp;
using System;
using System.IO;
using System.Net.Mail;
using System.Net.Mime;

namespace FluentEmail
{
    public class EmailNotification : IEmailNotification
    {
        public bool SendEmailNotification()
        {
            try
            {
                //Setup Default sender befault sending the email.
                SmtpClient smtpClient = new SmtpClient
                {
                   Host = "smtp.office365.com",
                   Port = 587,
                   EnableSsl = true,
                   Credentials = new System.Net.NetworkCredential("username", "Password")
                };
                Email.DefaultSender = new SmtpSender(smtpClient);

                Email.DefaultRenderer = new RazorRenderer();

                string imagePath = @"C:\Users\pratik.soni\Downloads\FluentLogo.png";

                Stream stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read); …
Run Code Online (Sandbox Code Playgroud)

email fluent-interface html-email asp.net-core-2.0

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